繁体   English   中英

名称的剃刀子串

[英]Razor Substring of Name

我需要得到名字的名字的首字母

我有以下几点:

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

我在程序尝试运行它时收到以下错误:

模板只能与字段访问,属性访问,一维数组索引或单参数自定义索引器表达式一起使用。

只需向您的视图模型添加一个属性:

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)

在子字符串之前,请检查字符串的长度,否则将获得索引超出范围的异常;

@MvcHtmlString.Create(item.title.Length > 20 ? @item.title.ToString().Substring(0, 20):@item.title.ToString())

您无法执行此操作,因为到您的对象的映射不会像这样工作。 就像异常消息告诉您只能将其与属性一起使用一样。

但是,您可以编写自己的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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM