2012-02-22 37 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)