我有一个ParentView
,它自己的字段很少。此ParentView
根据在ParentView中选择的下拉菜单,在3个不同的PartialViews中呈现单个PartialView
。因此有PartialViewA
,PartialViewB
和PartialViewC
。一次只能渲染一个。每个都有自己的表,即。模型类。
Eg: PartialViewAModel:ParentViewModel
..依此类推。
我想到的收集数据的方法之一是使用FormCollection
。
因此,如果dropdownvalue
为A,我将知道必须选择哪些密钥以及将其存储在何处。
但是有没有更优雅的方法来绑定数据?如果只有一个视图和模型,我本可以在绑定中简单地使用Modelclass。例如:ublic
[HttpPost]
ActionResult Create(CustomerClass cust)
答案 0 :(得分:1)
如果您指定具有子部分视图模型的父视图模型,如下所示:
public class ParentViewModel
{
public ParentViewModel()
{
PartialViewModel1 = new PartialViewModel1();
PartialViewModel2 = new PartialViewModel2();
PartialViewModel3 = new PartialViewModel3();
}
public string PartialViewType { get; set; } /* Value to determine which view to show */
public PartialViewModel1 PartialViewModel1 { get; set; }
public PartialViewModel2 PartialViewModel2 { get; set; }
public PartialViewModel3 PartialViewModel3 { get; set; }
}
部分视图模型(例如PartialViewModel1
)具有该视图模型唯一的属性,例如:
public class PartialViewModel1
{
public string Property1_1 { get; set; }
public string Property1_2 { get; set; }
public string Property1_3 { get; set; }
}
您可以指定父视图,使其具有包含部分视图的形式,可以在客户端使用一些JavaScript进行切换(我没有提供,但应该足够简单:)):
@model Models.ParentViewModel
@using (Html.BeginForm("Update", "Home", FormMethod.Post))
{
@Html.TextBoxFor(x => x.PartialViewType) /* Change this to a drop down */
@Html.Partial("PartialView1")
@Html.Partial("PartialView2")
@Html.Partial("PartialView3")
<input type="submit" value="Submit" />
}
部分视图如下所示,例如为PartialView1
:
@model Models.ParentViewModel
<h3>Partial View 1</h3>
<p>@Html.TextBoxFor(x => x.PartialViewModel1.Property1_1)</p>
<p>@Html.TextBoxFor(x => x.PartialViewModel1.Property1_2)</p>
<p>@Html.TextBoxFor(x => x.PartialViewModel1.Property1_3)</p>
因此,现在您可以通过Update
来对控制器执行ParentViewModel
操作:
[HttpPost]
public ActionResult Update(ParentViewModel model)
{
// Do whatever processing required.
// You can switch on model.PartialViewType to process the appropriate PartialView fields
return View("Index", model);
}
提交时,模型应包含在适当的Partial View Model属性中提交的所有内容。
希望这会有所帮助!