在razor视图中使用Html.DisplayFor应用css类

时间:2015-11-05 14:21:25

标签: c# .net asp.net-mvc razor

在剃刀视图中,我使用模型渲染标签,如

 @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不适用。 为什么呢?

3 个答案:

答案 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命名的视图(例如StringBooleanByte等)或DataType enum的成员来完成({{1} },CreditCard等),EmailAddress。例如,如果您在Views\Shared\DisplayTemplates创建了一个视图,那么当您使用类型为Views\Shared\DisplayTemplates\String.cshtml的属性调用DisplayFor时,该视图将用于呈现它。然后,您可以将该值直接包装在您选择的某些HTML中,并使用string来应用适当的HTML属性。例如:

ViewData

答案 2 :(得分:0)

.NET Core 2.2剃须刀页面调整大小复选框

在这里晚于游戏,但与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>