Ответ 1
Если вы только хотите отобразить первый символ item.FirstName
, почему бы не сделать:
@Html.DisplayFor(modelItem => item.FirstName.Substring(1,1))
У вас есть неправильная сторона закрывающей скобки.
У меня есть следующее внутри моего представления
@Html.DisplayFor(modelItem => item.FirstName)
Мне нужно получить первый начальный номер имени.
Я пробовал
@Html.DisplayFor(modelItem => item.FirstName).Substring(1,1)
но он, похоже, не работает. Я получаю следующую ошибку:.. "System.Web.Mvc.MvcHtmlString" не содержит определения для "Подстрока" и без расширения
Если вы только хотите отобразить первый символ item.FirstName
, почему бы не сделать:
@Html.DisplayFor(modelItem => item.FirstName.Substring(1,1))
У вас есть неправильная сторона закрывающей скобки.
Вы можете реализовать следующее:
@Html.DisplayFor(modelItem => modelItem.FirstName).ToString().Substring(0,5)
Вы должны поместить свойство в свой ViewModel для этого вместо того, чтобы пытаться получить его в коде просмотра. Ответственность только за представление состоит в том, чтобы отобразить то, что ему дано моделью, не должно создавать новые данные из модели.
Могу ли я предположить, что представление не подходит для этого. Вероятно, вы должны иметь отдельное свойство модели, 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 )
Вы можете использовать собственный метод расширения, как показано ниже:
/// <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 )
@c.Description.ToString().Substring(0, 100)
Две вещи, которые я узнал, пытаясь решить эту проблему, являются ключевыми: 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