MVC Razor需要获取Substring

本文关键字:获取 Substring Razor MVC | 更新日期: 2023-09-27 18:25:31

我的视图中有以下内容

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

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

我试过

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

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

MVC Razor需要获取Substring

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

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

我可以建议视图不是执行此操作的正确位置吗。您可能应该有一个单独的模型属性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 )

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

您可以使用如下所示的自定义扩展方法:

/// <summary>
/// Returns only the first n characters of a String.
/// </summary>
/// <param name="str"></param>
/// <param name="start"></param>
/// <param name="maxLength"></param>
/// <returns></returns>
public static string TruncateString(this string str, int start, int maxLength)
{        
    return str.Substring(start, Math.Min(str.Length, maxLength));
}

这对我有效(没有助手):

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

这将截断10个字符并添加"如果长度超过13个字符,则一直到最后。

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

在试图解决这个问题时,我学到了两件事,它们是关键:

  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

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

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

你把它放错了括号的一边。