我有我的看法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