【问题标题】:Using @Html.EditorFor to create new model使用@Html.EditorFor 创建新模型
【发布时间】:2017-08-12 05:42:22
【问题描述】:

我想呈现一个用于创建模型的新实例的表单。我试过了,

@Html.EditorFor(model => new Person())

但我得到了错误,

模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式。

我试过了,

@Html.EditorForModel("MyNamespace.Person")

但没有渲染。当我没有要传递给它的模型实例时,如何使用Html.EditorFor

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    您似乎对如何使用@Html.EditorFor() 感到有些困惑。首先,您对 lambda 表达式的使用不太合理,model => new Person()。如果您想创建模型的新实例,则无需使用 lambda,只需 new Person() 为您提供该实例。

    其次,您不需要将实际实例传递给@Html.EditorFor()。此方法的目的是生成一个 html 标记,包括一个属性甚至多个属性的输入字段。

    假设您的Person 模型有一个Age 属性,那么您可以通过调用为该属性创建一个编辑字段

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

    现在model 来自哪里?您必须在视图中定义它,因此将此行添加到视图文件的顶部,以便 ASP.net 知道从哪个模型中获取 Age 属性,

    @model <namespace>.Models.Person

    namespace 通常是您的项目的名称,如果您没有将模型放在 Models 文件夹中,请将其替换为您的模型所在的位置。

    【讨论】:

    • 是的。我肯定很困惑!所以我应该EditorFor 用于模型本身,而我只在渲染属性的输入字段时使用它?如果是这样,我应该如何呈现完整的表格?将其放在部分中并使用@Html.Partial 调用是最佳做法吗?
    • 您可以使用@Html.EditorFor(m => m) 为您的模型生成所有表单控件,但通常您为您的模型创建一个EditorTempate 来控制输出
    • @StephenMuecke 当没有模型实例可供参考时,这将如何工作?当我写完这一切时,我在想也许我需要重新设计我的应用程序。
    • 所有你需要的是@model Person 在视图的顶部,正如 Chris 所指出的。您不需要将模型传递给视图,但最好在控制器中这样做,例如 return View(new Person()); 如果您只想创建一个新的 Person
    • 嘿@Jeff 我建议多次调用@Html.EditorFor() 以获得您希望用户提供输入以生成完整表单的属性。在您看来,要引用的模型将来自@model <namespace>.Models.Person。如果我所说的对你来说听起来很希腊化并且你不介意一些脚手架/生成的代码,那么尝试在你的控制器类中右键单击你的操作方法并选择Add View 并选择Create 模板。如果您还有任何问题,请随时提出。
    猜你喜欢
    • 2013-09-27
    • 2021-12-29
    • 2017-05-24
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多