在剃刀视图中,我使用模型渲染标签,如
@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" })
现在我想使用它的值而不是数据注释attr。值,所以我尝试使用DisplayFor
@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" })
此css类control-label col-md-6
不适用。
为什么呢?
答案 0 :(得分:27)
区别在于@Html.LabelFor
辅助函数呈现<label></label>
标记,而@Html.DisplayFor
辅助函数不呈现任何html标记,而是呈现纯文本。例如,以下代码:
@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" })
返回原始文本:
Martin
考虑到MyName的价值是&#34; Martin&#34;。代码:
@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" })
将返回:
<label class="control-label col-md-6">Martin</label>
考虑差异。
使用以下(如果您想使用@ Html.DisplayFor):
<span class"control-label col-md-6">@Html.DisplayFor(model => model.MyName)</span>
答案 1 :(得分:14)
DisplayFor
与其他*For
助手不同。像EditorFor
一样,它就是所谓的“模板助手”。换句话说,它呈现的内容由可以修改的模板控制。重要的是,对于这两种方法,如果您在MSDN中查找他们的文档,您会看到与其他帮助者正常对应htmlAttributes
的参数,而是指additionalViewData
这两个。这是因为它们的输出再次受到基本上视图的控制,这些视图取ViewData
。
此外,特别是DisplayFor
,默认模板几乎只输出值,没有HTML。例如,如果传递字符串属性,则输出将是该字符串的值,而不是其他任何内容。因此,即使您可以将HTML属性传递给它,也没有任何内容可以将它们联系起来。
如果您想要执行您要执行的操作,则必须创建自定义显示模板。这可以通过添加以types命名的视图(例如String
,Boolean
,Byte
等)或DataType
enum的成员来完成({{1} },CreditCard
等),EmailAddress
。例如,如果您在Views\Shared\DisplayTemplates
创建了一个视图,那么当您使用类型为Views\Shared\DisplayTemplates\String.cshtml
的属性调用DisplayFor
时,该视图将用于呈现它。然后,您可以将该值直接包装在您选择的某些HTML中,并使用string
来应用适当的HTML属性。例如:
ViewData
答案 2 :(得分:0)
在这里晚于游戏,但与Razor模板显示它们相比,需要使复选框很大。因为我希望用户查看是否已检查。
我尝试了以上操作,但没有用。因此,我使用了Chrome开发者工具来查看页面正在呈现的内容,并在复选框中显示了该内容:
input[type="radio"], input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
由于我可以使用所有更大的复选框,所以我打算在CSS文件中找到它。但是,它说它位于这里:
reboot.scss:373
现在,我发誓当我第一次在开发人员中打开它时,它引用了一个不同的scss文件。但是由于它对我来说像希腊语,是一个代码错误,因此我决定将其(在上面的样式中尝试过之后)放在我的Razor页面的顶部。注意,我只是克隆了上面的隐藏样式,并添加了宽度和高度:
<style>
input[type="radio"],
input[type="checkbox"] {
box-sizing: border-box;
width: 40px;
height:40px;
}
</style>
现在,这是我正在显示的Razor控件。它最终以html中的复选框结尾,但是我相信Razor Page足够聪明,可以知道它是True / False字段并将其显示为文本框。但。 。 。不是在应用我添加的尺寸之前!希望这对某人有帮助。
<td>
@Html.DisplayFor(modelItem => item.Moderated)
</td>