2014-02-18 71 views
5

我想截断的文本字段,有时是非常大的或在其他时候,它是从数据库即需要截断剃刀HTML DisplayFor助手

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

,并在最后三个点替换空。

我已经尝试了子字符串函数,但不断收到错误。

任何指针,谢谢!

更新:

的......是不是非常重要的,所以我试图用

@Html.DisplayFor(modelItem => item.MainBiography.Substring(0,10)) 

,并收到以下错误代码:

System.InvalidOperationException了用户代码未处理HResult = -2146233079消息=模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。来源= System.Web.Mvc -

+2

向我们展示代码...您收到了哪些错误? –

+0

System.InvalidOperationException由用户代码未处理 HResult = -2146233079 消息=模板只能与字段访问,属性访问,单维数组索引或单参数自定义索引器表达式一起使用。 Source = System.Web.Mvc –

回答

7

你最好在创建模型中不同的属性,拿起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) 

另一种方法是建立一个完整的视图模式,但我矫枉过正往往不是找到它。

+0

作品多谢了! –

+0

我在Helper中遇到错误 - 名为'item'的局部变量无法在此范围内声明,因为它会给'item'赋予不同的含义,'item'已用于'parent或current'范围中以表示其他内容 因此,我使用@ Html.DisplayFor(modelItem => item.SpecialistInterestsTrimmed)和它的罚款。 –

+0

@ Html.DisplayFor(modelItem => item.MainBiographyTrimmed) –

0

尝试使用Html.Display,而不是DisplayFor这样的:

@Html.Display(item.MainBiography.Substring(0, 10), null, "MainBiography") 

通过你的两个拉姆达陈述invalid.Parameter名称应该是相同的方式。

不喜欢这样的:

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

它应该是:

@Html.DisplayFor(modelItem => modelItem.MainBiography) 

或者:

@Html.DisplayFor(item => item.MainBiography) 
+0

如果这是一个嵌套类型,他将失去他的html字段名称(前缀)使用“显示”。 –

1

DisplayFor要求代表财产的表达式。

您可以将属性添加到模型:

public string MainBiographyTrimmed 
{ 
    get 
    { 
     if (MainBiography.Length) > 10 
      return MainBiography.Substring(0, 10) + "..."; 
    } 
} 

您认为这些只是做:

@Html.DisplayFor(item => item.MainBiographyTrimmed) 
1

你可以写一个字符串扩展方法,并调用你的模型属性(中字符串类型)。您可以通过您的子字符串操作的限制。

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))