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 进行样式设置。DataAnnotations
ftw!谢谢。【参考方案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)