c#-MVC发布页面部分-模型绑定失败

我正在尝试发布页面的一部分,并将其绑定到控制器上的视图模型.我的SearchVM编辑器模板:

@Html.TextBoxFor(model => model.TestText, new { @class = "form-control ",
                 @placeholder = "TEXT" , @id="test" })
<input type="submit" value="Submit" />

Index.cshtml:

@using (Html.BeginForm("Search", "Pencil", FormMethod.Post, 
                       new { enctype = "multipart/form-data" }))
{
   @Html.EditorFor(model => model.SearchVM);
}

控制器:

  public ActionResult Search(SearchVM vm)
  {
     // ...
  }

当我在testText文本框中键入内容并单击Submit时,我会执行搜索操作,但vm.TestText为空,因此无法将表单字段从编辑器模板绑定到视图模型.任何想法?

解决方法:

发生这种情况的原因是,作为@model传递给视图的类包装了SearchVM类,并且当您调用@ Html.EditorFor(model => model.SearchVM)时,它将使用前缀SearchVM呈现输入:

<input id="SearchVM_TestText" name="SearchVM.TestText" value="" ... />

反过来,当发布回控制器时,ModelBinder将无法反序列化为SearchVM

您可以做的是使用this EditorFor重载:

@Html.EditorFor(model => model.SearchVM, "_SearchVM", "");

其中_SearchVM是您的编辑器模板的名称.传递“”作为htmlFieldName参数将删除输入中不需要的SearchVM前缀.

上一篇:继承模型MVC


下一篇:转换锚标记HTML链接以使用@ Html.ActionLink