作为ASP.Net MVC3新手,我们有一个需要帮助的问题。 (这个帖子的底部也有问题。)
首先,我不确定以下是否是最好的解决方法,所以如果我们朝着错误的方向前进,请告诉我。我们希望使用部分视图来查找下拉列表。在某些情况下,查找将在多个位置完成,而且,数据不是我们的viewmodel的一部分。数据可能来自我们应用程序中的数据库或Web服务。一些数据在启动时加载,一些数据基于表单中选择的其他值。
我们从主视图中调用子操作,并返回包含我们获取的数据的部分视图。一旦用户选择了他们的选择,我们就不确定如何在主视图模型中存储所选的项目代码。
在我们的主要表格中,我们呼吁采取行动:
@model Apps.Model.ViewModels.AVMApplicationInfo
...
<div class="editor-label">
@Html.LabelFor(m => m.VMResidencyWTCS.DisplayState)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.VMResidencyWTCS.DisplayState)
@Html.DropDownListFor(m => m.VMResidencyWTCS.DisplayState, Apps.Model.Helpers.ResidencyStates.StateList)
@Html.ValidationMessageFor(m => m.VMResidencyWTCS.DisplayState)
</div>
@Html.Action("DisplayCounties", "PersonalInfo")
...
在PersonalInfo控制器中:
[ChildActionOnly]
public ActionResult DisplayCounties()
{
IList<County> countiesDB = _db.Counties
.OrderBy(r => r.CountyDescr)
.Where(r => r.State == "WI"
&& r.Country == "USA")
.ToList();
//Create an instance of the county partial view model
VMCounty countyView = new VMCounty();
//Assign the available counties to the view model
countyView.AvailableCounties = new SelectList(countiesDB, "CountyCd", "CountyDescr");
return PartialView("_DisplayCounties", countyView);
}
在_DisplayCounties局部视图中:
@model Apps.Model.ViewModels.VMCounty
<div class="editor-label">
@Html.LabelFor(m => m.CountyDescr)
</div>
<div class="editor-field">
@Html.DropDownListFor(x => x.SelectedCountyCd, Model.AvailableCounties)
</div>
如何将SelectedCountyCd分配给主窗体视图模型中的字段(Apps.Model.ViewModels.AVMApplicationInfo)?是否存在调用子操作/部分视图的问题;即,它是否在启动时加载,是否可以使用此方法将用户选择包括为查找过滤器?如果是这样,该值如何传递给子控制器; viewbag?
答案 0 :(得分:1)
您可以将其作为参数传递给子操作:
@model Apps.Model.ViewModels.AVMApplicationInfo
...
@Html.Action("DisplayCounties", "PersonalInfo", new {
selectedCountyCd = Model.CountyCd // or whatever the property is called
})
然后让子操作将此值作为参数:
[ChildActionOnly]
public ActionResult DisplayCounties(string selectedCountyCd)
{
IList<County> countiesDB = _db.Counties
.OrderBy(r => r.CountyDescr)
.Where(r => r.State == "WI"
&& r.Country == "USA")
.ToList();
//Create an instance of the county partial view model
VMCounty countyView = new VMCounty();
//Assign the available counties to the view model
countyView.AvailableCounties = new SelectList(countiesDB, "CountyCd", "CountyDescr");
// assign the selected value to the one passed as parameter from the main view
countyView.SelectedCountyCd = selectedCountyCd;
return PartialView("_DisplayCounties", countyView);
}