Javascript 如何将id添加到@Html.DisplayFor
我正在尝试将id添加到Javascript 如何将id添加到@Html.DisplayFor,javascript,asp.net-mvc,razor,Javascript,Asp.net Mvc,Razor,我正在尝试将id添加到 @Html.DisplayFor(model => model.ScreenWidth, new { @id = "width"}) 然后使用 document.getElementById("width").innerHTML = w; 为什么不工作?帮助程序的DisplayFor不会生成任何HTML标记,它只输出格式化文本。因此,您不能向其添加id属性。您可以改为将其包装在标记(div或span)中: 或者你也可以使用这个 <span id
@Html.DisplayFor(model => model.ScreenWidth, new { @id = "width"})
然后使用
document.getElementById("width").innerHTML = w;
为什么不工作?帮助程序的
DisplayFor
不会生成任何HTML标记,它只输出格式化文本。因此,您不能向其添加id
属性。您可以改为将其包装在标记(div或span)中:
或者你也可以使用这个
<span id="width">@Html.Displayfor(model => model.ScreenWidth) </span>
@Html.Displayfor(model=>model.ScreenWidth)
另一种方法是创建自定义的显示模板,然后可以使用该模板呈现值和包含id
属性的
标记
如果您希望将id设置为自定义项,而不是属性名称:
在Views\Shared\DisplayTemplates中创建一个名为SpanWithId.cshtml的文件(如果缺少这些文件夹,请创建其中的任何文件夹),并添加以下代码:
<span id="@(ViewBag.HtmlID)">@Model</span>
@{var fieldName = ViewData.TemplateInfo.HtmlFieldPrefix;}
<span id="@fieldName" name="@fieldName">@Model</span>
该代码是根据答案改编的
如果要将id和名称设置为属性的名称:
在Views\Shared\DisplayTemplates中创建一个名为SpanWithIdAndName.cshtml的文件(如果缺少这些文件夹,请创建它们中的任何一个),并添加以下代码:
<span id="@(ViewBag.HtmlID)">@Model</span>
@{var fieldName = ViewData.TemplateInfo.HtmlFieldPrefix;}
<span id="@fieldName" name="@fieldName">@Model</span>
该代码是根据答案改编的,我假设您只是想显示一个标签。我就是这样做到的
<label id="lblName">
@Html.Raw(@Model.ObjectA.ObjectB.ObjectC.ToString())
</label>
HTML.DisplayFor没有生成任何HTML标记是错误的,至少在ASP.NET core 3.1中是这样。它返回IHtmlContent的一个实例。将HTML.DisplayFor与布尔值一起使用时,它会生成一个checkbox.类型的输入。您的方法的问题是,对于每个HTML.DisplayFor,我们需要在其周围包装一个div,然后使用javascript。
@Html.DisplayFor(model => model.ScreenWidth, "SpanWithIdAndName")
<label id="lblName">
@Html.Raw(@Model.ObjectA.ObjectB.ObjectC.ToString())
</label>
$('#lblName').text("New Value");