2017-08-29 40 views
0

我有一個窗體(使用主視圖模型),然後是部分視圖來實現窗體的地址部分(輔助視圖模型)。當我提交表單時,我沒有回到表單的內部部分視圖部分的值。沒有得到任何錯誤,只是失去了部分的價值。代碼如下:失去部分視圖模型表格值

形式的

「主」 部分:

@model REMS.ViewModels.AddComplexViewModel 

@{ 
    ViewBag.Title = "Add Complex"; 
} 

<h2>@ViewBag.Title</h2> 

@{ Html.Partial("~/Views/Shared/Partials/ActionStatusPartial.cshtml", Model.ActionStatusMessageViewModel); } 

@using (Html.BeginForm("AddComplex", "Admin", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
{ 
    @Html.AntiForgeryToken() 
    <h4>Add a New Complex</h4> 
    <hr />  
    <div class="form-group"> 
     @Html.LabelFor(m => m.Name, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.TextBoxFor(m => m.Name, new { @class = "form-control" }) 
     </div> 
    </div> 

    @Html.Partial("~/Views/Shared/Partials/AddressFormPartial.cshtml", Model.AddressViewModel) 

    <div class="form-group"> 
     @Html.Label("Owner", new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("SelectedOwner", Model.Owners, "Select an Owner...") 
     </div> 
    </div> 
    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" class="btn btn-default" value="Add" /> 
     </div> 
    </div> 
} 

形式的局部視圖:

@model REMS.ViewModels.AddressViewModel 

<div class="form-group"> 
@Html.LabelFor(m => m.Address1, new { @class = "col-md-2 control-label" }) 
<div class="col-md-10"> 
    @Html.TextBoxFor(m => m.Address1, new { @class = "form-control" }) 
</div> 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.Address2, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.TextBoxFor(m => m.Address2, new { @class = "form-control" }) 
    </div> 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.City, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.TextBoxFor(m => m.City, new { @class = "form-control" }) 
    </div> 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.State, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.TextBoxFor(m => m.State, new { @class = "form-control" }) 
    </div> 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.Zip, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.TextBoxFor(m => m.Zip, new { @class = "form-control" }) 
    </div> 
</div> 

視圖模型:

public class AddComplexViewModel 
{ 
    [Display(Name = "Name")] 
    public string Name { get; set; } 

    [Display(Name = "AddressViewModel")] 
    public AddressViewModel AddressViewModel { get; set; } 

    [Display(Name = "SelectedOwner")] 
    public Guid SelectedOwner { get; set; } 

    [Display(Name = "Owners")] 
    public SelectList Owners { get; set; } 

    [Display(Name = "ActionStatusMessageViewModel")] 
    public ActionStatusViewModel ActionStatusMessageViewModel { get; set; } 

    public AddComplexViewModel() 
    { 
     ActionStatusMessageViewModel = new ActionStatusViewModel(); 
     AddressViewModel = new AddressViewModel(); 
    } 
} 


public class AddressViewModel 
{ 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 
} 

當我提交的形式地址值全爲空。我錯過了什麼嗎?

+0

局部視圖仍技術上來看,你不能夠從部分獲取值只是因爲它是主視圖的形式中。你可以使用像這裏概述的編輯器模板 - > https://stackoverflow.com/questions/5197038/complex-models-and-partial-views-model-binding-issue-in-asp-net-mvc-3 – ragerory

+0

該解決方案工作。現在有其他問題,但與此無關。你可以添加這個答案,以便我可以將其標記爲已接受?謝謝! –

回答

0

部分視圖在技術上還視圖。僅僅因爲它位於主視圖窗體的內部,您無法從部分獲取值。

調查Editor Templates,他們可以讓你實現你正在尋找的東西。

更多對here

0

傳遞給您的主要的AddComplexViewModel模型的部分視圖來生成輸入的正確名稱。我假設在AddComplex方法中,您將AddComplexViewModel作爲參數。

變化主要形式:

@Html.Partial("~/Views/Shared/Partials/AddressFormPartial.cshtml", Model.AddressViewModel) 

到:

@Html.Partial("~/Views/Shared/Partials/AddressFormPartial.cshtml", Model) 

然後在局部視圖變化:

@model REMS.ViewModels.AddressViewModel 

到:

@model REMS.ViewModels.AddComplexViewModel 

並且每個拉姆達等:

m => m.Address1 

到編輯後

m => m.AddressViewModel.Address1 

整個局部視圖:

@model WebApplication2.Controllers.AddComplexViewModel 

<div class="form-group"> 
@Html.LabelFor(m => m.AddressViewModel.Address1, new { @class = "col-md-2 control-label" }) 
<div class="col-md-10"> 
    @Html.TextBoxFor(m => m.AddressViewModel.Address1, new { @class = "form-control" }) 
</div> 
</div> 
<div class="form-group"> 
@Html.LabelFor(m => m.AddressViewModel.Address2, new { @class = "col-md-2 control-label" }) 
<div class="col-md-10"> 
    @Html.TextBoxFor(m => m.AddressViewModel.Address2, new { @class = "form-control" }) 
</div> 
</div> 
<div class="form-group"> 
@Html.LabelFor(m => m.AddressViewModel.City, new { @class = "col-md-2 control-label" }) 
<div class="col-md-10"> 
    @Html.TextBoxFor(m => m.AddressViewModel.City, new { @class = "form-control" }) 
</div> 
</div> 
<div class="form-group"> 
@Html.LabelFor(m => m.AddressViewModel.State, new { @class = "col-md-2 control-label" }) 
<div class="col-md-10"> 
    @Html.TextBoxFor(m => m.AddressViewModel.State, new { @class = "form-control" }) 
</div> 
</div> 
<div class="form-group"> 
@Html.LabelFor(m => m.AddressViewModel.Zip, new { @class = "col-md-2 control-label" }) 
<div class="col-md-10"> 
    @Html.TextBoxFor(m => m.AddressViewModel.Zip, new { @class = "form-control" }) 
</div>