ChatGPT解决这个技术问题 Extra ChatGPT

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

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

文本输入如下所示:

@Html.EditorFor(model => model.Text)
有关如何自定义 EditorTemplate 的另一个问题,请参阅 this answer

T
Tallmaris

您可以像这样在视图模型上使用 [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 英尺!谢谢你。
T
Tyson Phalp

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

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

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


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

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

在你的模型中声明

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

谢谢 !