MVC Razor нужно получить подстроку - PullRequest
13 голосов
/ 22 февраля 2012

У меня есть следующее внутри моего взгляда

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

Мне нужно получить первый инициал имени.

Я пытался

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

но, похоже, не работает. Я получаю следующую ошибку: .. «System.Web.Mvc.MvcHtmlString» не содержит определения «Подстрока» и не имеет расширения

Ответы [ 6 ]

26 голосов
/ 05 января 2013

Вы можете реализовать следующим образом:

@Html.DisplayFor(modelItem => modelItem.FirstName).ToString().Substring(0,5)
7 голосов
/ 22 февраля 2012

Могу ли я предположить, что представление не является подходящим местом для этого.Вероятно, у вас должно быть отдельное свойство модели 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 )
7 голосов
/ 22 февраля 2012

Для этого вы должны поместить свойство в ViewModel вместо того, чтобы пытаться получить его в коде представления. Ответственность только за представление состоит в том, чтобы отобразить то, что ему дано моделью, а не создавать новые данные из модели.

2 голосов
/ 27 августа 2015

Вы можете использовать пользовательский метод расширения, как показано ниже:

/// <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));
}

Надеюсь, это поможет ...

1 голос
/ 09 апреля 2017

Это сработало для меня (без помощника):

@item.Description.ToString().Substring(0, (item.Description.Length > 10) ? 10 : item.Description.Length )
0 голосов
/ 22 февраля 2012

Если вы хотите отобразить только первый символ item.FirstName, почему бы не сделать:

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

У вас неправильная сторона закрывающей скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...