Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将id添加到@Html.DisplayFor_Javascript_Asp.net Mvc_Razor - Fatal编程技术网

Javascript 如何将id添加到@Html.DisplayFor

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

我正在尝试将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");