Бритвенная подстрока имени - PullRequest
0 голосов
/ 22 февраля 2012

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

У меня есть следующее:

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

Я получаю следующую ошибку, когда программа пытается ее запустить:

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

Ответы [ 3 ]

1 голос
/ 22 февраля 2012

Просто добавьте свойство к вашей модели представления:

public string FirstName { get; set; }

public string FirstLetterOfName
{
    get
    {
        // TODO: a minimum amount of error checking
        // might be good here for cases when FirstName
        // is null or an empty string
        return this.FirstName.Substring(1, 1);
    }
}

, а затем:

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

И если вы сейчас скажете мне, что вы не используете модели представления, нонепосредственно передавая свои доменные сущности вашим представлениям (что очень плохо), вы можете использовать пользовательский шаблон:

@Html.DisplayFor(modelItem => item.FirstName, "FirstLetter") 

, а затем вы определяете пользовательский шаблон отображения ~/Views/Shared/DisplayTemplates/FirstLetter.cshtml со следующим содержимым:

@ViewData.TemplateInfo.FormattedModelValue.Substring(1, 1)
0 голосов
/ 12 октября 2013

Перед подстрокой проверьте длину строки, иначе вы получите индекс вне диапазона исключений;

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

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

Однако вы можете написать собственное расширение HtmlHelper, чтобы делать то, что вы хотите

public static class HtmlHelpers
{
    public static MvcHtmlString CustomDisplayFor(this HtmlHelper<Person> htmlHelper, Expression<Func<Person, string>> expression)
    {
          var customBuildString = string.Empty;
          //Make your custom implementation here
          return MvcHtmlString.Create(customBuildString);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...