Как объявить переменную в представлении mvc с помощью бритвы, чтобы иметь класс атрибута html
Я хочу отобразить текст с 2 ссылками внутри текста в виде MVC! Текстовая ссылка является динамической со стороны сервера и выглядит так в контроллере:
Model.Message = "You have used up all your credits for this month (see your credit balance {FirstLink}). You can buy credits {SecondLink}";
В связи с этим у меня есть что-то вроде этого
@{
var messageToShow = @Model.Message;
var newText = Html.ActionLink(Model.LinkText, Model.LinkAction, Model.LinkController, Model.LinkRouteValues).ToString();
var link = Html.ActionLink(Model.SecondLinkText, Model.SecondLinkAction, Model.SecondLinkController, Model.LinkRouteValues).ToString();
}
@if (!string.IsNullOrEmpty(Model.LinkText))
{
messageToShow = messageToShow.Replace("{FirstLink}", newText);
}
@if (!string.IsNullOrEmpty(Model.SecondLinkText))
{
messageToShow = messageToShow.Replace("{SecondLink}", link);
}[![enter image description here][1]][1]
@Html.Raw(messageToShow)
Это работает, как есть, но я должен добавить класс к нему, как это
@Html.ActionLink(Model.SecondLinkText, Model.SecondLinkAction, Model.SecondLinkController, Model.LinkRouteValues, new { @class = "link" })
При добавлении нового { @class = "link"} я получил синтаксическую ошибку, поскольку закрытие} плохо интерпретируется движком бритвы.
Можете ли вы помочь или, возможно, предложить лучшее решение?
Спасибо
2 ответа
Чтобы устранить синтаксическую ошибку, ваша модель представления должна будет включать свойство для атрибутов html, либо
public IDictionary<string, object> LinkAttributeValues { get; set; }
если LinkRouteValues
это typeof RouteValueDictionary
, или же
public object LinkAttributeValues { get; set; }
если LinkRouteValues
это typeof object
И тогда ваш код становится
Html.ActionLink(Model.SecondLinkText, Model.SecondLinkAction,
Model.SecondLinkController, Model.LinkRouteValues, Model.LinkAttributeValues)
Обратите внимание, что оба ваши @if (!string.IsNullOrEmpty(Model....))
строки так кода бессмысленны, так как если либо LinkText
или же SecondLinkText
мы null
или пустая строка, предыдущая Html.ActionLink(..)
строки кода вызвали бы исключение.
Одним из вариантов будет просто использовать
<span>You have used up all your credits for this month (see your credit balance</span>
@Html.ActionLink(Model.LinkText, Model.LinkAction, Model.LinkController, Model.LinkRouteValues, new { @class = "link" })
<span>). You can buy credits</span>
@Html.ActionLink(Model.SecondLinkText, Model.SecondLinkAction, Model.SecondLinkController, Model.LinkRouteValues, new { @class = "link" })
или если вы хотите установить текст сообщения в контроллере, вы можете иметь 2 свойства, скажем, string Message
а также string Message2
и использовать <span>@Model.Message1</span>....
Вам не нужно ставить префикс "@" перед ActionLink, когда вы находитесь внутри блока кода. Удалите это, и я уверен, что синтаксическая ошибка исчезнет.