2016-01-13 54 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