use*_*862 13 .net c# asp.net-mvc razor
在剃刀视图中,我使用模型来渲染标签
@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" })
Run Code Online (Sandbox Code Playgroud)
现在我想使用它的值而不是数据注释attr.值,所以我尝试使用DisplayFor之类的
@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" })
Run Code Online (Sandbox Code Playgroud)
这个css类control-label col-md-6不适用.为什么?
小智 31
区别在于 @Html.LabelFor辅助函数呈现<label></label>标记,而@Html.DisplayFor辅助函数不呈现任何html标记,而是呈现纯文本.例如,以下代码:
@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" })
Run Code Online (Sandbox Code Playgroud)
返回原始文本:
Martin
Run Code Online (Sandbox Code Playgroud)
考虑到MyName的值为"Martin".和代码:
@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" })
Run Code Online (Sandbox Code Playgroud)
将返回:
<label class="control-label col-md-6">Martin</label>
Run Code Online (Sandbox Code Playgroud)
考虑一下差异.
使用以下(如果你想使用@ Html.DisplayFor):
<span class"control-label col-md-6">@Html.DisplayFor(model => model.MyName)</span>
Run Code Online (Sandbox Code Playgroud)
Chr*_*att 13
DisplayFor不像其他*For助手一样工作.就像EditorFor,它被称为"模板助手".换句话说,它呈现的内容由可以修改的模板控制.重要的是,对于这两种方法,如果您在MSDN中查找其文档,您将看到htmlAttributes与其他帮助程序正常对应的参数,而是指additionalViewData这两个.这是因为它们的输出再次受到基本上视图的控制ViewData.
此外,DisplayFor特别是,默认模板几乎只输出值,没有HTML.例如,如果传递字符串属性,则输出将是该字符串的值,而不是其他任何内容.因此,没有什么可以将HTML属性绑定到,即使你可以传递它们.
如果您想要执行您要执行的操作,则必须创建自定义显示模板.这可以通过添加后命名视图进行类型(例如String,Boolean,Byte等等)或成员的DataType枚举(CreditCard,EmailAddress等), Views\Shared\DisplayTemplates.例如,如果您创建了一个视图Views\Shared\DisplayTemplates\String.cshtml,那么当您DisplayFor使用类型属性调用时string,该视图将用于渲染它.然后,您可以将值直接包装在您选择的某些HTML中,并ViewData用于应用适当的HTML属性.例如:
<span class="@ViewData["class"]">@ViewData.TemplateInfo.FormattedModelValue</span>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34156 次 |
| 最近记录: |