我正在使用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)识别的连贯字符串)。
答案 0 :(得分:48)
试试(验证):
<div id="@("label"+Model.Id)" class="display-field">@Model.InitValue</div>
答案 1 :(得分:2)
你想:
<div id="label@Model.Id" ...
Razor会将@识别为代码的开头,执行它并在属性中生成结果。
编辑:
这不适用于评论,但这是我的一个Razor控件中的一行:
<input type="text" readonly="readonly"
class="display-field display-field-@ViewData.ModelMetadata.PropertyName"
id="@((ViewData["id"] == null) ?
ViewData.ModelMetadata.PropertyName : ViewData["id"])"
value="@Proj.GetJobStatusValue(Model)" />
尝试在@之前添加连字符( - )。 Razor很可能认为这是一个电子邮件地址并且不管它!
答案 2 :(得分:1)
添加另一个选项,因为在我尝试将字符串和模型值作为@html.ActionLink中的id连接以及文本值时,这对我有用。我需要使用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()) })
答案 3 :(得分:1)
这是您需要做的。
id="label_@Model.Id"
需要下划线(_)。对我来说,在不使用下划线的情况下传递ID会引起问题。祝你生日快乐。