如何为DisplayFor创建MVC Razor模板

如何解决如何为DisplayFor创建MVC Razor模板

|| 我的视图模型中有几个仅显示属性,但是我需要使用jQuery检索它们的值以在页面上执行计算。标准的Html.displayFor()方法只是将其值写入页面。我想创建一个剃刀模板,使我可以将每个元素呈现为:
<span id=\"ElementsId\">Element\'s value</span>
我知道我可以在Html.displayFor()中指定一个模板以使用特定的模板来呈现属性,但是如何在该模板内标识要写入span标签的id属性
@Html.displayFor(model => model.Element,\"MyTemplate\");

解决方法

好的,我发现了它,实际上非常简单。在我的Views \\ Shared \\ DisplayTemplates文件夹中,我具有包含以下内容的Reading.cshtml:
@model System.Int32
<span id=\"@ViewData.ModelMetadata.PropertyName\">@Model</span>
这使用属性的名称作为id属性和属性的值作为内容来呈现正确的标记:
<span id=\"Reading\">1234</span>
在视图文件中,可以使用以下命令进行调用:
@Html.DisplayFor(model => model.Reading,\"Reading\")
或者,如果模型属性用UIHint(\“ Reading \”)装饰,则可以将模板名称保留在对DisplayFor()的调用之外,并且仍将使用该模板进行呈现:
@Html.DisplayFor(model => model.Reading)
这与自定义编辑器模板应该同样有效。,您可以将此“ 6”部分加入视图模型并在显示模板中使用它:
<span id=\"@Model.Id\">@Html.DisplayFor(x => x.Value)</span>
,我读了很多关于为Boolean属性定义
@Html.DisplayFor
模板的SO帖子,但我不清楚它们。您的问题很接近这个问题,在掌握了这个问题之后,我决定添加一个新的答案,其中包括实现该问题的所有步骤。这可能对其他人有帮助。 1.创建模板 首先,您需要在下面的路径中添加ѭ9(该路径非常重要):
Views/Shared/DisplayTemplates/
例如,我创建了一个名为
_ElementTemplate
Partial View
并按以下方式填充它:
<span>
    @(@Model ? \"Yes\" : \"No\")
</span>
2.将UIHint添加到模型 要在
property
template
之间建立连接,应在模型类中添加如下所示的
UIHint
属性:
[UIHint(\"_YesOrNoTemplate\")]
public bool MyProperty { get; set; }
3.在视图中使用@ Html.DisplayNameFor 在需要此属性的每个视图中,可以使用以下代码:
<div>
    @Html.DisplayFor(modelItem => item.MyProperty)
</div>
输出量 在我的示例(
if (MyProperty == true)
)中,以上代码呈现为以下代码:
<div>
    <span>
        Yes
    </span>
</div>
设定属性 要设置
id
或其他html属性,您可以使用ModelMetadata,如下所示:
<span id=\"@ViewData.ModelMetadata.PropertyName\">
    @(@Model ? \"Yes\" : \"No\")
</span>
具有属性的输出
<div id=\"MyProperty\">
    <span>
        Yes
    </span>
</div>
,有一篇文章介绍了Razor中的
Templates
(显示+编辑器)以及
UIHint
属性。,我遇到的问题与原始帖子完全相同。 不确定最后一条评论是否有效。它将使HTML id属性成为运行时值,因此无法使用设计时名称进行引用。 我使用了DisplayFor的重载,它允许您将新对象添加到数据字典(ViewBag) 我的模型是一个名为Project的C#对象,具有各种属性。在我看来,我有:
@Html.DisplayFor(model => model.ProjectName,\"StringDisplaySetHtmlID\",new { HtmlID = \"project-name\" })
这使用一个名为StringDisplaySetHtmlID的自定义模板,最后一个参数将一个键值对添加到Viewbag。 我的模板文件如下所示:
@model string
<span class = \"display-field\" id = \"@(ViewBag.HtmlID)\">@Model</span> 
我还在这里设置一个类以供样式使用。为了避免潜在的常见命名冲突,我使用了键名HtmlID而不是ID。 现在,在我的JavaScript中,我可以使用以下jquery来获取span \的内容:
var projectName = $(\'#project-name\').text()
,构建显示模板的最佳方法将输出以下内容:
<span id=\"ElementsId\">Element\'s value</span>
会是这样的:
<span id=\"@Html.IdForModel()\">@Html.DisplayTextFor(m => m)</span>
当首次发布此问题时,这些助手可能并不存在,但这是基于David的回答的两种方式: 使用
@Html.DisplayTextFor(m => m)
代替
@Model
仍将在渲染值时使用数据注释,而不仅仅是在其上运行
ToString()
。 在嵌套或重复模型且ID不能简单地用作属性名称的情况下,最好使用
@Html.IdForModel()
而不是
@ViewData.ModelMetadata.PropertyName

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?