(Razor) Html.Helper中的字符串长度是多少?

5

这是一个非常简单的问题。

我有一个Html.helper:

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

如何将字符串从item.Text裁剪到特定长度?我希望您可以直接在item.Text上执行SubString或类似操作。

如果您想知道我为什么这样做,那是因为字符串太长了,而我只想在索引视图等地方显示一部分内容。


在将其发送到视图之前,您可能希望先处理这个问题。 - Mikael Östberg
5个回答

5

我也有同样的需求,并使用下面的代码解决了这个问题。

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

此外,我建议在字符串超过您给出的限制时添加..

4

以下有三种可能性可供考虑:

  1. 在将域模型转换为视图模型时,在映射层中删除文本
  2. 编写自定义HTML助手
  3. 为给定类型编写自定义显示模板,然后有三种可能性指示正确的显示模板:1)依赖约定(在这种情况下无需操作,模板将自动选择)2)使用UIHint属性装饰您的视图模型属性3)将模板名称作为DisplayFor助手的第二个参数传递。

好的分析。一如既往 :) 谢谢。 - Kasper Skov

3
您可以在视图模型中添加一个属性来对字符串进行截断,并显示截断后的内容:
// View model
public string TextShort { get { return Text.Substring(0, 10); } }

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

真棒的解决方案。因为我在视图中有其他需要以不同方式处理的属性,这将使它变得容易。我没有想到。谢谢。 - Kasper Skov

2
改变
@Html.DisplayFor(modelItem => item.Text) 

to

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

我还没有测试过它,但那可能是我今天会使用的解决方案。 - Kasper Skov

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是动态的,因此应该可以向视图模型添加新属性。


-1 这样不行 - 那个参数是一个表达式,由 DisplayFor 方法遍历以识别要显示的成员 - 它与输出无关。 - Andras Zoltan
编辑和展示另一个想法。 - Preet Sangha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接