我是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,因为它显示了整个字符串,但我想了解为什么会发生这种情况。
这是LabelExtensions
类的LabelHelper方法。源
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
按原样显示内容(无需任何编码)。
我的解决方案是:
<label id=@("label_" + Model.Name) for=@("textBox_" + Model.Name)>@(Model.Caption)</label>
您可以使用@Html.Label的第二个重载方法,如下所示:
@Html.Label(",foo.GetString)
这将给你带来预期的结果。