2016-01-13 58 views
0

下面是我的视图模型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.modelB传递到局部视图中,我可以获得所有的值。 这是MVC的预期行为吗?还是我需要任何配置?

+0

其中是您的控制器操作方法代码? –

+0

如果你使用这样的局部视图,那么你必须在acton参数中使用两个视图模型。公共ActionResult MyAction(ModelA modelA,ModelB modelB) –

回答

2

您需要更换

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

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

和重命名你的偏

/Views/Shared/EditorTemplates/ModelB.cshtml 

,以便其在EditorTemplate(注意文件名必须是与班级名称相同)。你也可以找到它在/Views/yourControllerName/EditorTemplates文件夹)

或者,你需要指定每HtmlFieldPrefixthis answer

需要注意的是,如果你检查HTML你部分正在生成,它将包括

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

而它需要

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

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

+0

Thx。将有一个替代解决方案,以及:) – WenHao