Подтвердить что ты не робот

MVC Razor необходимо получить подстроку

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

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

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

Я пробовал

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

@c.Description.ToString().Substring(0, 100) 

Ответ 8

Две вещи, которые я узнал, пытаясь решить эту проблему, являются ключевыми:  1. Razor позволяет С#, что означает, что метод .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