MVC Razor需要获得Substring

时间:2012-02-22 15:52:50

标签: c# asp.net-mvc razor

我在视图中有以下内容

     @Html.DisplayFor(modelItem => item.FirstName)

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

我试过

    @Html.DisplayFor(modelItem => item.FirstName).Substring(1,1) 

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

7 个答案:

答案 0 :(得分:26)

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

@Html.DisplayFor(modelItem => modelItem.FirstName).ToString().Substring(0,5)

答案 1 :(得分:7)

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

答案 2 :(得分: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 )

答案 3 :(得分:1)

这对我有用(没有帮手):

@item.Description.ToString().Substring(0, (item.Description.Length > 10) ? 10 : item.Description.Length )

答案 4 :(得分:0)

我在尝试解决此问题时学到的两件事很关键:

  1. Razor允许使用C#,这意味着.Substring(0,1)方法将起作用
  2. (我在哪里出错)-请务必注意,您的项目均不存在。名字为空或包含的字符少于 请求为字符串长度。

我的解决方法如下:

string test = item.FirstName.ToString();
    string test_add = ""; //creating an empty variable
    if(test.Length == 0) //situation where we have an empty instance
    {
        test_add = "0"; //or whatever you'd like it to be when item.FirstName is empty
    }
    else
    {
        test_add = test.Substring(0, 1);
    }

,您可以在剃须刀代码中使用@test_add代替@ item.FirstName

答案 5 :(得分:0)

这将截断10个字符,如果长度超过13个字符,则在末尾添加“ ...”。

@if (item.Notes.Length <= 13)
{
  @Html.DisplayFor(modelItem => item.FirstName)
}
else
{
  @(item.FirstName.ToString().Substring(0, 10) + "...")
}

答案 6 :(得分:-11)

如果您只想显示item.FirstName的第一个字符,请执行以下操作:

@Html.DisplayFor(modelItem => item.FirstName.Substring(1,1))

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