MVC:无法将ViewModel回发到控制器

时间:2016-01-13 06:30:21

标签: asp.net-mvc

以下是我的视图模型

public class ModelA
{
    public string name {get;set;}
    public string age {get;set;}
    public ModelB modelB {get;set;}
}

以下是部分视图:_PartialView

@model ModelB
@*Bind all the into control*@
@Html.EditorFor(model => model.Name1)
@Html.EditorFor(model => model.Name2)
@Html.EditorFor(model => model.Name3)

这是视图

@model ModelA
using (Ajax.BeginForm("ActionName", "AreaName", new AjaxOptions()
{
     HttpMethod = "POST",
     InsertionMode = InsertionMode.Replace,
     OnSuccess = "BusinessPartner",
     OnFailure = "ErrorThrown"

}, new { name = "My App", id = "My App" }))
{
     @Html.EditorFor(model => model.name)
     @Html.EditorFor(model => model.age)
    @Html.Partial("_PartialView", Model.modelB)
     <input type="submit" class="btn btn-primary tabSubmit tab1" id="tab1Next" value="Save and Proceed" />
}

当我对控制器进行回发时,我能够在ModalA中获取值,但ModalB为空。 如果我将整个Model而不是Model.modelB传递到局部视图中,我就可以获得所有的值。 这是MVC的预期行为吗?或者我需要任何配置吗?

1 个答案:

答案 0 :(得分:2)

您需要替换

@Html.Partial("_PartialView", Model.modelB)

@Html.EditorFor(m => m.modelB)

并将您的部分重命名为

/Views/Shared/EditorTemplates/ModelB.cshtml

这样它的EditorTemplate(注意文件的名称必须与类的名称相同)。您也可以在/Views/yourControllerName/EditorTemplates文件夹中找到它)

或者,您需要根据this answer

指定HtmlFieldPrefix

请注意,如果您检查当前正在生成的html,则会包含

<input name="Name1" ... />

然而它需要

<input name="modelB.Name1" ... />

以便绑定到您的模型。使用EditorTemplate而不是部分将生成正确的name属性