如何将id添加到@ Html.DisplayFor

时间:2017-01-30 07:25:06

标签: javascript asp.net-mvc razor

我正在尝试将ID添加到

@Html.DisplayFor(model => model.ScreenWidth, new { @id = "width"})

然后使用

document.getElementById("width").innerHTML = w;

为什么不起作用?

4 个答案:

答案 0 :(得分:6)

DisplayFor帮助程序不会生成任何HTML标记,只会输出格式化文本。因此,您无法为其添加id属性。你可以做的是将它包装在一个标签(div或span)中:

<div id="width">
    @Html.DisplayFor(model => model.ScreenWidth)
</div>

然后能够操纵此标记的内容:

document.getElementById("width").innerHTML = w;

答案 1 :(得分:0)

另外你也可以使用它

      <span id="width">@Html.Displayfor(model => model.ScreenWidth) </span>

答案 2 :(得分:0)

另一种解决方法是创建自定义的显示模板,然后可以使用该模板来呈现值和包含您的<span>属性的id标记。

如果要将ID设置为自定义名称,而不是属性名称:

在Views \ Shared \ DisplayTemplates中创建一个名为SpanWithId.cshtml的文件(如果缺少这些文件夹,则创建任何一个文件夹)并添加以下代码:

<span id="@(ViewBag.HtmlID)">@Model</span>

然后在您的视图中,您可以像这样使用它:

@Html.DisplayFor(model => model.ScreenWidth, "SpanWithId", new { HtmlID = "project-name" })

该代码是对Phillip Smith's答案here的改编

如果要将ID和名称设置为属性的名称:

在Views \ Shared \ DisplayTemplates中创建一个名为SpanWithIdAndName.cshtml的文件(如果缺少这些文件夹,则创建任何一个文件夹)并添加以下代码:

@{var fieldName = ViewData.TemplateInfo.HtmlFieldPrefix;}
<span id="@fieldName" name="@fieldName">@Model</span>

然后在您的视图中,您可以像这样使用它:

@Html.DisplayFor(model => model.ScreenWidth, "SpanWithIdAndName")

该代码是对David Clarke's答案here的改编

答案 3 :(得分:0)

我假设您只是想显示标签。这就是我完成这项工作的方式。

<label id="lblName">
    @Html.Raw(@Model.ObjectA.ObjectB.ObjectC.ToString())
</label>

然后,如果我想在jQuery中更改值,我可以:

$('#lblName').text("New Value");