ASP.NET MVC3 - 带@ Html.EditorFor的textarea

Jac*_*zek 205 asp.net-mvc-3

我有ASP.NET MVC3应用程序,我也有表单添加新闻.当VS2010创建默认视图时,我只有字符串数据的文本输入,但我想要textarea用于新闻文本.我如何使用Razor语法来完成它.

文字输入如下:

@Html.EditorFor(model => model.Text)
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 370

您可以[DataType]在视图模型上使用此属性,如下所示:

public class MyViewModel
{
    [DataType(DataType.MultilineText)]
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以有一个控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }
}
Run Code Online (Sandbox Code Playgroud)

以及一个符合你想要的观点:

@model AppName.Models.MyViewModel
@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.Text)
    <input type="submit" value="OK" />
}
Run Code Online (Sandbox Code Playgroud)

  • 几乎我在寻找什么,但如果我需要指定行和列的html属性怎么办? (7认同)
  • 知识渊博,仍然保持简单,并逐步解释一切.冰雹@Darin Dimitrov. (7认同)
  • 我仍然在源代码中获得[class ="text-box single-line"] :( (3认同)

Tys*_*alp 135

有人询问添加属性(特别是'rows'和'cols').如果你正在使用Razor,你可以这样做:

@Html.TextAreaFor(model => model.Text, new { cols = 35, @rows = 3 })
Run Code Online (Sandbox Code Playgroud)

这对我行得通.'@'用于转义关键字,因此它们被视为变量/属性.


add*_*ddy 95

@Html.TextAreaFor(model => model.Text)
Run Code Online (Sandbox Code Playgroud)

  • @Ciaran:这句话应该响个不停.永远不需要更改数据库层来修改UI.应该有一个表示对象,它是数据库对象的映射器.永远不要在你的UI中使用数据库对象. (9认同)
  • 我更喜欢这种方法,因为这里流行的答案涉及修改数据库模型,这意味着如果使用EntityFramework,您必须删除并重新创建底层数据库. (6认同)
  • DataType Annotation不强制在Entity Framework中刷新. (6认同)
  • 需要明确的是,Frederik所指的是从DbContext中使用的类创建表示视图数据SEPARATE的类.不要将DbContext模型传递到视图中.创建一个视图模型类,然后将您关心的信息从db模型转移到视图模型中,反之亦然. (5认同)
  • @FrederikPrijck我不同意,但这不违反DRY校长吗?您必须将所有属性从一个类复制到另一个类.你找到的那种做得不那么"平凡"吗? (3认同)