需要截断Razor HTML DisplayFor Helper
我试图截断一个有时非常大的文本字段,或者在其他时候从数据库中删除它,即
@Html.DisplayFor(modelItem => item.MainBiography)
并在最后用三个点替换。
我已经尝试过子串函数但不断出错。
任何指针,谢谢!
更新:
……并不是非常重要,所以我尝试使用
@Html.DisplayFor(modelItem => item.MainBiography.Substring(0,10))
并获取以下错误代码:
System.InvalidOperationException未由用户代码处理HResult = -2146233079 Message = Templates只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。 Source = System.Web.Mvc –
你最好在模型中创建一个不同的属性,拿起MainBiography
并最终缩短它。
像这样:
// This is your property (sampled) public string MainBiography { get; set; } //How long do you want your property to be at most ? //(Best practice advices against magic numbers) private int MainBiographyLimit = 100; //You probably need this if you want to use .LabelFor() //and let this property mimic the "full" one [Display(Name="Main Biography")] public string MainBiographyTrimmed { get { if (this.MainBiography.Length > this.MainBiographyLimit) return this.MainBiography.Substring(0, this.MainBiographyLimit) + "..."; else return this.MainBiography; } }
用法是
@Html.DisplayFor(item => item.MainBiographyTrimmed)
另一种方法是建立一个完整的视图模型,但我发现它经常过度杀戮。
您可以编写一个字符串扩展方法,并在您的模型属性(字符串类型)上调用它。 您可以传递子字符串操作的限制。
public static class StringExtensions { public static string SubStringTo(this string thatString, int limit) { if (!String.IsNullOrEmpty(thatString)) { if (thatString.Length > limit) { return thatString.Substring(0, limit); } return thatString; } return string.empty; } }
并在您的视图中,导入您具有扩展方法的命名空间,并在您的字符串属性上调用该方法。
@Html.DisplayFor(modelItem => item.MainBiography.SubStringTo(10))
DisplayFor
需要一个表示属性的表达式。
您可以向模型添加属性:
public string MainBiographyTrimmed { get { if (MainBiography.Length) > 10 return MainBiography.Substring(0, 10) + "..."; } }
然后在你的视图中做:
@Html.DisplayFor(item => item.MainBiographyTrimmed)
尝试使用Html.Display
而不是DisplayFor
如下所示:
@Html.Display(item.MainBiography.Substring(0, 10), null, "MainBiography")
顺便说一句,你们的两个lambda语句都是无效的。参数名称应该是相同的。
不是这样的:
@Html.DisplayFor(modelItem => item.MainBiography)
它应该是:
@Html.DisplayFor(modelItem => modelItem.MainBiography)
要么:
@Html.DisplayFor(item => item.MainBiography)