我是MVC4的新手并且不明白为什么@ Html.Label正在按照以下方式砍掉我的字符串数据。
返回的字符串是“11,12.2,15.2,17.1R,18.3R,21R”,@ Html.Label正在砍掉最后一个之前的所有内容。字符。
查看
<td>@foo.GetString</td>
<td>@Html.Label(foo.GetString)</td>
模型
public string GetString { get
{
return "11, 12.2, 15.2, 17.1R, 18.3R, 21R";
}
}
产生的标记
<tr>
<td>11, 12.2, 15.2, 17.1R, 18.3R, 21R</td>
<td>
<label for="">3R, 21R</label>
</td>
</tr>
我正在使用@ foo.GetString,因为这会显示整个字符串,但我想了解为什么会这样。
答案 0 :(得分:3)
这是LabelExtensions
类的LabelHelper方法。 source
internal static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata,
string htmlFieldName, string labelText = null,
IDictionary<string, object> htmlAttributes = null)
{
string resolvedLabelText = labelText ?? metadata.DisplayName
?? metadata.PropertyName
?? htmlFieldName.Split('.').Last();
if (String.IsNullOrEmpty(resolvedLabelText))
{
return MvcHtmlString.Empty;
}
TagBuilder tag = new TagBuilder("label");
tag.Attributes.Add("for", TagBuilder.CreateSanitizedId(
html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
tag.SetInnerText(resolvedLabelText);
tag.MergeAttributes(htmlAttributes, replaceExisting: true);
return tag.ToMvcHtmlString(TagRenderMode.Normal);
}
如您所见,它会在字段名称htmlFieldName.Split('.').Last()
中找到最后一个点,以便在您的案例中生成resolvedLabelText
。所以你不应该用它来显示原始数据。其主要用途是显示metadata.DisplayName
或metadata.PropertyName
。
您可以尝试@Html.Raw
按原样显示内容(不进行任何编码)。
答案 1 :(得分:0)
我的解决方案是:
<label id=@("label_" + Model.Name) for=@("textBox_" + Model.Name)>@(Model.Caption)</label>
答案 2 :(得分:0)
您可以使用@ Html.Label的第二个重载方法,如下所示:
@ Html.Label(“”,foo.GetString)
会给你预期的结果。