2012-02-22 41 views
12

我有我的看法MVC剃刀需要获得子串

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

以下里面我需要的名字的首字母。

我试图

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

,但它似乎并没有工作。我得到以下错误:..“System.Web.Mvc.MvcHtmlString”不包含“子串”,并没有扩展名的定义

+0

如果你想要'Substring(1,1)'而不是'Substring(0,1)',我会非常惊讶。 – tvanfosson 2012-02-22 16:01:46

回答

-9

如果你只想要显示的item.FirstName第一个字符为什么不这样做:

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

你有它的右括号的错误的一面。

+5

这不起作用。你会得到一个'InvalidOperationException',因为方法调用在html助手使用的lambda表达式中不被支持。 – 2012-02-22 16:21:39

7

你应该为你的ViewModel放置一个属性,而不是试图在视图代码中获取它。唯一的责任是显示模型赋予它的内容,它不应该从模型创建新数据。

5

我可以建议视图不是正确的位置。您应该有一个单独的模型属性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) 
22

你可以考虑实现如下:

@Html.DisplayFor(modelItem => modelItem.FirstName).ToString().Substring(0,5) 
+1

这对我来说非常好,谢谢分配! – ShaunOReilly 2014-01-04 01:28:34

+0

作为魅力工作。谢谢 – MuniR 2016-08-24 12:30:07

1

您可以使用自定义的扩展方法,如下图所示:

/// <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)); 
} 

希望这有助于...

-1

这对我有效(没有帮手):

@item.Description.ToString().Substring(0, (item.Description.Length > 10) ? 10 : item.Description.Length)