剃刀标签点周期

时间:2015-05-12 13:11:09

标签: c# asp.net-mvc razor

我将mvc5与razor结合使用,并根据语言动态填充网站文本。例如:

@Html.Label(@DDHelper.GetContent("user_name"), htmlAttributes: new { @class = "control-label col-md-3" })

@DDHelper.GetContent("user_name")返回一个字符串,该字符串设置为标签文本。当@DDHelper.GetContent("user_name")返回" Hello。"标签未创建且html源为空。

我知道这是因为@HTML.Label()不允许'。'这是我问题的根源,我应该使用@HTML.LabelFor()但是当我只想显示一个字符串时如何使用@HTML.LabelFor()

2 个答案:

答案 0 :(得分:9)

检查@ Html.Label的重载,你正在使用的是:

public static MvcHtmlString Label(this HtmlHelper html, 
                                  string expression, 
                                  object htmlAttributes)

你想要的是

public static MvcHtmlString Label(this HtmlHelper html, 
                                  string expression, 
                                  string labelText, 
                                  object htmlAttributes)

对HTML label的含义存在常见的误解。在winforms上,标签是放置一些文本的地方 - 在HTML中不是这种情况。在HTML中,<label>允许用户单击您的文本并使焦点/光标指向相应的输入。

标签的完整语法是:

<label for="controlName">caption</label>

&#39;表达&#39;上面重载的一部分是&#34; for&#34;在HTML中的一部分 - 它必须指向控件名称。

如果您正在尝试这样做(将标签与控件配对),请尝试:

@Html.Label("user_name", 
            @DDHelper.GetContent("user_name"), 
            htmlAttributes: new { @class = "control-label col-md-3" })

您的输入名称为&#39; user_name&#39;。这就是@Html.LabelFor的用武之地,如:

@Html.Labelfor(model=>model.UserName, 
               @DDHelper.GetContent("user_name"), 
               htmlAttributes: new { @class = "control-label col-md-3" })

所以你不要硬编码字段名称并重构。

如果你&#34;只想显示字符串&#34;然后你可能不想要<label>。如果你只需要一些简单的文字,你就不需要任何@Html,只能输出翻译:

<div class='control-label col-md-3'>
    @DDHelper.GetContent("user_name")
</div>

但是当你正在使用&#39; control-label&#39;我怀疑你确实想要<label>

答案 1 :(得分:0)

如果Html.Label(..)不是一个选项,我建议另外一个选择:

<h4>@Html.Encode(@DDHelper.GetContent("user_name"))</h4>

对我来说很好。