Ответ 1
Попробуйте это (проверено):
<div id="@("label"+Model.Id)" class="display-field">@Model.InitValue</div>
Я использую 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), если на то пошло).
Попробуйте это (проверено):
<div id="@("label"+Model.Id)" class="display-field">@Model.InitValue</div>
Вы хотите:
<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 считает это адресом электронной почты и оставляет его в покое!
Просто добавьте еще один параметр, поскольку это то, что сработало для меня, когда вы пытаетесь конкатрировать строку и значение модели как 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()) })