Как объявить переменную в представлении 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, когда вы находитесь внутри блока кода. Удалите это, и я уверен, что синтаксическая ошибка исчезнет.

Другие вопросы по тегам