ASP.NET MVC3 - 带有@Html.EditorFor 的文本区域

Posted

技术标签:

【中文标题】ASP.NET MVC3 - 带有@Html.EditorFor 的文本区域【英文标题】:ASP.NET MVC3 - textarea with @Html.EditorFor 【发布时间】:2011-06-23 01:22:03 【问题描述】:

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

文本输入如下所示:

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

【问题讨论】:

相关,见this answer另一个关于如何自定义EditorTemplate的问题。 【参考方案1】:

您可以像这样在视图模型上使用[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" />

【讨论】:

差不多就是我要找的东西,但是如果我需要指定 rows 和 cols html 属性怎么办? 我仍然在源代码中得到 [class="text-box single-line"] :( 知识渊博,仍然保持尽可能简单,并逐步解释所有内容。欢呼@Darin Dimitrov。 @Jason 使用 CSS 进行样式设置。 DataAnnotationsftw!谢谢。【参考方案2】:

有人询问添加属性(特别是“行”和“列”)。如果您使用的是 Razor,则可以这样做:

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

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

【讨论】:

确实——如果你知道你想要一个带有列/行的文本区域,那么几乎没有理由使用 EditorFor 而不是 TextAreaFor。任何人都有理由仍然需要使用 EditorFor 并且知道您需要指定列/行吗?【参考方案3】:
@Html.TextAreaFor(model => model.Text)

【讨论】:

我更喜欢这种方法,因为这里流行的答案涉及修改数据库模型,这意味着如果使用 EntityFramework,您必须删除并重新创建底层数据库。 DataType 注解不会在实体框架中强制刷新。 @Ciaran:这个声明应该敲响警钟。永远不需要更改数据库层来修改 UI。应该有一个表示对象,它是数据库对象的映射器。永远不要在你的 UI 中使用数据库对象。 明确地说,Frederik 指的是创建代表视图数据的类,与 DbContext 中使用的类分开。不要将 DbContext 模型传递给视图。创建一个视图模型类,然后将您关心的信息从 db 模型转移到视图模型中,在接受输入时反之亦然。 @FrederikPrijck 我不反对,但这不违反 DRY 原则吗?您必须将所有属性从一个类复制到另一个类。你发现有没有更“平凡”的做法?【参考方案4】:

在你的模型中声明

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

谢谢!

【讨论】:

以上是关于ASP.NET MVC3 - 带有@Html.EditorFor 的文本区域的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC3 - 仅分页(不显示 WebGrid)

jqGrid postdata 发送空值(mvc3 asp/net)

经典ASP.NET MVC3.0入门详解

ASP.NET MVC3:ValidationType ModelClientValidationRule

C# asp.net MVC3 中的日历控件

ASP.NET MVC3 双重验证(逗号、点、空)