2011-09-02 82 views
2

这是一个非常简单的问题。(Razor)Html.Helper中的字符串长度?

我有一个Html.helper:

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

如何,我从item.Text字符串减少到一个特定的长度?我希望你可以做一个SubString或东西直接在item.Text。

如果youre想知道为什么我想这一点,因为它的字符串是很长,我只是想表明一点它像索引视图等

+0

你可能想将它发送到视图之前照顾那个。 –

回答

2

你可以只添加属性上,做的字符串截断您的视图模型,并显示代替:

// View model 
public string TextShort { get { return Text.Substring(0, 10); } } 

// View 
@Html.DisplayFor(modelItem => item.TextShort) 
+0

真棒解决方案。因为我有其他属性需要在视图中以不同的方式进行操作,这可以使其变得简单。没想到那个。谢谢。 –

4

有迹象表明,可以考虑3种可能性:

  1. 地带你的映射层的文本将其发送到视图(域模型转换为视图模型时)
  2. 编写自定义HTML辅助
  3. 编写自定义显示模板给定类型之前然后3个位置ibilities以指示正确的显示模板:1)依靠公约(没有在这种情况下做的,模板会自动挑选)2)装饰与UIHint属性3)您的视图模型属性通过模板的名称作为第二个参数DisplayFor帮手。
+0

良好的分析。一如既往:)谢谢。 –

0

编辑:新建答案

怎么样

@{ 
modelItem.ShortText= model.Text.Substring(0, ....); 
} 

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

的原型DisplayFor是:

public static MvcHtmlString DisplayFor<TModel, TValue>(
    this HtmlHelper<TModel> html, 
    Expression<Func<TModel, TValue>> expression 
) 

而modelItem是一个动态的我认为,所以应该可以添加一个新的属性到视图模型。

+0

-1这不起作用 - 该参数是通过DisplayFor方法来识别要显示的成员的表达式 - 它与输出无关 –

+0

ahh ok谢谢 –

+0

编辑并呈现另一个理念。 –

3

我需要同样的事情,解决了以下行的情况。

<td> 
    @{ 
     string Explanation = item.Explanation; 
     if (Explanation.Length > 10) 
     { 
      Explanation = Explanation.Substring(0, 10); 
     } 
    } 
@Explanation 
</td> 

如果字符串始终是大于10,就可以排除:

if (Explanation.Length > 10) 
{ 
    Explanation = Explanation.Substring(0, 10); 
} 

并直接写入:

string Explanation = item.Explanation.Substring(0, 10); 

此外,我建议对超过限制的字符串添加..你给。

2

变化

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

@Html.Display(item.Text.Length > 10 ? item.Text.Substring(0,10) : item.Text) 
+0

还没有测试过,但这可能是我今天使用的解决方案。 –