如何在MVC中定义@ Html.DisplayFor的maxlength?

时间:2016-01-31 00:52:38

标签: c# asp.net-mvc entity-framework linq

我是MVC的新人 我在创建视图中textarea取最大nvarchar,但在显示模式(索引页面)中,所有这些字符都显示给我,所以我想在模型

public string Description { get; set; }

Create控制器

@Html.TextAreaFor(model => model.Description, new { @class = "form-control" })

Index控制器

@Html.DisplayFor(x => Model[i].Description)

我的问题出现在这张图片中: enter image description here

2 个答案:

答案 0 :(得分:3)

您需要基本上在字符串类型的属性上执行子字符串,并指定所需的字符数。您可以考虑创建一个扩展方法来执行此操作。

public static class StringExtensions
{
    public static string ToSafeSubString(this string value, int count)
    {
         return value != null && value.Length > count ?
                                                   value.Substring(0, count) : value;
    }
}

在你的剃须刀视图中你可以称之为

@for (var i = 0; i < Model.Count; i++)
{      
    var descTrimmed= Model[i].Description.ToSafeSubString(10);

    @Html.DisplayFor(f => descTrimmed)

}

或者,如果您有索引页面的视图模型,则在将域实体映射到视图模型列表时,可以在字符串属性上调用扩展方法。

public ActionResult Index()
{
   var userList= db.Users.Select(s=> new UserViewModel {
                                  UserName =s.UserName,
                                  Description=s.Description.ToSafeSubString(10) })
                              .ToList();
   return View(userList);
}

答案 1 :(得分:0)

编辑时,您可以使用maxlength属性限制文字:

@Html.TextAreaFor(model => model.Description, new { @class = "form-control", @maxlength = "20" })

显示时,您可以使用Substring()方法限制文本,但必须使用变量来存储结果,因为DisplayFor无法对方法结果进行操作:

string desc = Model[i].Description.Substring(0, 20);
@Html.DisplayFor(x => desc)