【问题标题】:Form POST gives empty model fields when using EditorFor使用 EditorFor 时,表单 POST 提供空模型字段
【发布时间】:2017-11-22 19:57:52
【问题描述】:

目前我有一个表单,我想将它放在多个视图中。目前,当我提交此表单时,模型返回的所有值都为 null,我不确定为什么。

当我通过它进行调试时,到达 POST 事件,但模型值为空。 (不是模型本身)。

联系模型

public class ContactModel : BasePageModel
{
    public string Introduction { get; set; }
    public ContactForm Form { get; set; }
    public ContactModel(TreeNode node, ContactForm form = null) : base(node)
    {
        Introduction = node.GetEditableTextStringValue("Introduction", String.Empty);
        Form = form;
    }
}

表单的视图模型

public class ContactForm
{
    public string Title { get; set; }
    public string FirstName { get; set; }
    ....
}

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SendContact(ContactForm model)
{
    // Do stuff
}

这是我要“嵌入”的页面的视图,如果你愿意我要提交的联系表格。

@model MVCApp.Models.PageModels.ContactModel
....
@using (Html.BeginForm("SendContact", "Contact", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    @Html.EditorFor(model => model.Form)
}

以及联系表单本身的编辑器模板

@model MVCApp.Models.FormModels.ContactForm
....
@Html.LabelFor(model => model.Title)
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title, "")

@Html.LabelFor(model => model.FirstName)
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName, "")

....
<input type="submit" value="Submit" />

表单正确呈现了两个部分(周围的文本和字段)以及联系表单。但正如我上面所说,当我单击提交时,在 POST 中传递回控制器的模型(它确实通过调试命中)将其所有字段都设为空。

任何我可能出错的地方都会很棒。

【问题讨论】:

  • 因为视图中的模型是ContactModel所以你的POST方法需要是public ActionResult SendContact(ContactModel model)(不是ContactForm)——或者你可以使用[Bind(Prefix = "Form ")]ContactForm model)
  • 并且您需要在ContactModel 中添加一个无参数构造函数,否则提交时会抛出异常。

标签: c# asp.net-mvc


【解决方案1】:

将此标记为答案,因为无法将斯蒂芬斯的评论标记为答案。

使用 Stephens 的建议,我将 ActionResult 更改为使用

        public ActionResult SendContact([Bind(Prefix = "Form")]ContactForm model)

而且效果很好。字段和模型已正确填充。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多