ASP.NET MVC3-具有@ Html.EditorFor的textarea


209

我有ASP.NET MVC3应用程序,也有添加新闻的表格。当VS2010创建默认视图时,我只有用于字符串数据的文本输入,但是我想具有用于新闻文本的文本区域。我如何用Razor语法做到这一点。

文本输入如下所示:

@Html.EditorFor(model => model.Text)

相关,请参见有关如何自定义EditorTemplate的另一个问题的答案
Jeroen

Answers:


375

您可以[DataType]像这样在视图模型上使用属性:

public class MyViewModel
{
    [DataType(DataType.MultilineText)]
    public string Text { get; set; }
}

然后可以有一个控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }
}

和一个视图,它可以满足您的需求:

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

7
我几乎在寻找什么,但是如果我需要指定rows和cols html属性怎么办?
杰森

3
我仍然在源代码中得到[class =“ text-box single-line”] :(
Stavros

7
知识渊博,并且尽可能保持简单,并逐步解释所有内容。冰雹@Darin Dimitrov。
伊斯梅特的烷

@Jason使用CSS进行样式设置。
Jo Smo

DataAnnotationstw!谢谢。

136

有人问有关添加属性(特别是“行”和“列数”)的问题。如果您使用的是Razor,则可以执行以下操作:

@Html.TextAreaFor(model => model.Text, new { cols = 35, @rows = 3 })

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


确实-如果您知道想要带行/行的文本区域,则没有理由使用EditorFor而不是TextAreaFor。任何人都有您仍然需要使用EditorFor的原因,并且知道您需要指定cols / rows吗?
詹姆斯·豪格

95
@Html.TextAreaFor(model => model.Text)

6
我更喜欢这种方法,因为这里流行的答案涉及修改数据库模型,这意味着如果使用EntityFramework,则必须删除并重新创建基础数据库。
Ciaran Gallagher 2013年

6
该数据类型注释不会在实体框架中强制刷新。
Tallmaris

9
@Ciaran:这个声明应该敲响。永远不需要更改数据库层来修改UI。应该有一个表示对象,该对象是数据库对象的映射器。切勿在用户界面中使用数据库对象。
弗雷德里克·普里克

5
需要明确的是,Frederik所指的是从DbContext中使用的类创建表示您的视图数据SEPARATE的类。不要将DbContext模型传递到视图中。创建一个视图模型类,然后在接受输入时将您关心的信息从数据库模型转移到视图模型中,反之亦然。
Jim Yarbro 2014年

3
@FrederikPrijck我不同意,但这不违反DRY负责人吗?您必须将所有属性从一个类复制到另一类。您发现这样做有那么“平凡”吗?
詹姆斯·豪格

1

在模型中声明

  [DataType(DataType.MultilineText)]
  public string urString { get; set; }

然后在.cshtml中可以使用如下编辑器。您可以使用 @cols@rows 作为TextArea的大小

     @Html.EditorFor(model => model.urString, new { htmlAttributes = new { @class = "",@cols = 35, @rows = 3 } })

谢谢 !

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.