我有我的看法MVC剃刀需要获得子串
@Html.DisplayFor(modelItem => item.FirstName)
以下里面我需要的名字的首字母。
我试图
@Html.DisplayFor(modelItem => item.FirstName).Substring(1,1)
,但它似乎并没有工作。我得到以下错误:..“System.Web.Mvc.MvcHtmlString”不包含“子串”,并没有扩展名的定义
我有我的看法MVC剃刀需要获得子串
@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))
你有它的右括号的错误的一面。
这不起作用。你会得到一个'InvalidOperationException',因为方法调用在html助手使用的lambda表达式中不被支持。 – 2012-02-22 16:21:39
你应该为你的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)
你可以考虑实现如下:
@Html.DisplayFor(modelItem => modelItem.FirstName).ToString().Substring(0,5)
这对我来说非常好,谢谢分配! – ShaunOReilly 2014-01-04 01:28:34
作为魅力工作。谢谢 – MuniR 2016-08-24 12:30:07
您可以使用自定义的扩展方法,如下图所示:
/// <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)
如果你想要'Substring(1,1)'而不是'Substring(0,1)',我会非常惊讶。 – tvanfosson 2012-02-22 16:01:46