为什么@Html.Label呈现不完整的字符串



我是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.DisplayNamemetadata.PropertyName

您可以尝试@Html.Raw按原样显示内容(无需任何编码)。

我的解决方案是:

<label id=@("label_" + Model.Name) for=@("textBox_" + Model.Name)>@(Model.Caption)</label>

您可以使用@Html.Label的第二个重载方法,如下所示:

@Html.Label(",foo.GetString)

这将给你带来预期的结果。

最新更新