我将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()
?
答案 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>
对我来说很好。