[英]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.