Есть ли способ конкатенации строк в атрибутах html?

Я использую MVC3, и я хотел использовать частичный вид для создания динамических элементов DOM. Это мой текущий частичный вид:

@model MVCApp.ViewModels.TitlesViewModel

<div class="display-label">Name</div>
<div id="label"+"@Model.Id" class="display-field">@Model.InitValue</div>

Model.Id - 1, но в HTML в браузере я в настоящее время получаю:

id="label"+"1"

Итак, если я попытаюсь сделать что-то вроде:

alert($("#label1").text())

В окне предупреждения есть ничего.

Итак, как я могу добавить две строки вместе, чтобы сформировать одну связную строку, которая распознается jQuery (или document.getElementByID(str), если на то пошло).

Ответ 1

Попробуйте это (проверено):

<div id="@("label"+Model.Id)" class="display-field">@Model.InitValue</div>

Ответ 2

Вы хотите:

<div id="[email protected]" ...

Razor распознает @как начало кода, выполнит его и отобразит результаты в месте в атрибуте.

Edit:

Это не сработало, как комментарий, но здесь строка из одного из элементов управления Razor:

<input type="text" readonly="readonly" 
       class="display-field [email protected]" 
       id="@((ViewData["id"] == null) ? 
         ViewData.ModelMetadata.PropertyName : ViewData["id"])"
       value="@Proj.GetJobStatusValue(Model)" />

Попробуйте добавить дефис (-) до @. Вполне возможно, что Razor считает это адресом электронной почты и оставляет его в покое!

Ответ 3

Просто добавьте еще один параметр, поскольку это то, что сработало для меня, когда вы пытаетесь конкатрировать строку и значение модели как id в @html.ActionLink, а также для текстового значения. Мне нужно было использовать string.Concat. Не знаю, плохо ли это с точки зрения производительности.

  @Html.ActionLink(string.Concat("View all (", @Model.FooCount, ")"),
        //actionName        
        "SeeAllFoos",
        //ControllerName
        "Foo",
        // routeValues
        new { FooId = @Model.Foo.id },
        //htmlAttributes
        new { @class = "btn btn-success", onclick = "ShowProgress();",
        id = string.Concat("Foo",@Model.Foo.id.ToString()) })