MVC-Post 部分页面 - 模型绑定失败
MVC-Post Page Partially - Model Binding Fails
我正在尝试 post 页面的一部分并将其绑定到控制器上的视图模型。我的 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
文本框中键入内容并点击提交时,我到达了搜索操作,但是 vm.TestText
是空的,我无法将表单字段从编辑器模板绑定到视图模型.任何的想法?
发生这种情况是因为 class 作为 @model
传递给您的视图包装了 SearchVM
class,并且当您调用 @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
前缀。
我正在尝试 post 页面的一部分并将其绑定到控制器上的视图模型。我的 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
文本框中键入内容并点击提交时,我到达了搜索操作,但是 vm.TestText
是空的,我无法将表单字段从编辑器模板绑定到视图模型.任何的想法?
发生这种情况是因为 class 作为 @model
传递给您的视图包装了 SearchVM
class,并且当您调用 @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
前缀。