MVC Razor需要获得Substring

Nat*_*Pet 13 c# asp.net-mvc razor

我的观点中有以下内容

     @Html.DisplayFor(modelItem => item.FirstName)
Run Code Online (Sandbox Code Playgroud)

我需要获得名字的第一个首字母.

我试过了

    @Html.DisplayFor(modelItem => item.FirstName).Substring(1,1) 
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用.我收到以下错误:..'System.Web.Mvc.MvcHtmlString'不包含'Substring'的定义,也没有扩展名

小智 28

您可以在视图中实现如下:

@Html.DisplayFor(modelItem => modelItem.FirstName).ToString().Substring(0,5)
Run Code Online (Sandbox Code Playgroud)

  • 这可能会打破。字符串的 DisplayFor() 默认情况下返回一个 HtmlString,带有 HTML 编码的字符串,但也可以触发显示模板进行渲染,并非所有字符串都渲染为纯字符串。如果模板返回的不仅仅是字符串,例如 `<span class="fancy-string">@Model</span>"`,或者如果输入字符串包含 HTML 实体 (`"foo&bar"`),则您现在打印了部分 HTML。使用返回子字符串的单独模型属性是正确的方法。 (2认同)

Rya*_*anR 7

您应该在ViewModel上放置一个属性,而不是尝试在视图代码中获取它.视图唯一的责任是显示模型给它的内容,它不应该从模型中创建新数据.


tva*_*son 7

我可能会建议视图不适合这样做.您可能应该有一个FirstInitial包含逻辑的单独模型属性.您的视图应该只显示这个.

  public class Person
  {
       public string FirstName { get; set; }

       public string FirstInitial
       {
           get { return FirstName != null ? FirstName.Substring(0,1) : ""; }
       }

       ...
   }


   @Html.DisplayFor( modelItem => modelItem.FirstInitial )
Run Code Online (Sandbox Code Playgroud)


Nei*_*ght -17

如果您只想显示第一个字符,item.FirstName为什么不这样做:

@Html.DisplayFor(modelItem => item.FirstName.Substring(1,1))
Run Code Online (Sandbox Code Playgroud)

你把它放在右括号的错误一侧。

  • 这行不通。您将收到“InvalidOperationException”,因为 html 帮助器使用的 lambda 表达式不支持方法调用。 (5认同)