2

因为我们有希望提供援助的问题ASP.Net MVC3新手。 (在该线程的底部问题了。)从局部视图传递一个选择的值到主视图的视图模型

首先,我不知道,如果下面是去了解这个所以请让我知道,如果我们在错误的方向前进的最佳途径。我们希望使用部分视图来查看下拉列表。在某些情况下,查找会在多个地方进行,并另外,数据是不是我们的视图模型的一部分。数据可能来自我们应用程序中的数据库或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?

回答

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); 
} 
+0

我想你提出什么会让我传递用户选择作为查找的过滤器。也许更像这样:'@model Apps.Model.ViewModels.AVMApplicationInfo ... @ Html.Action(“DisplayCounties”,“PersonalInfo”,new { state = Model.State //或任何属性被称为 })'然后,控制器想以下:'[ChildActionOnly] 公共的ActionResult DisplayCounties(字符串状态) { IList的 countiesDB = _db.Counties .OrderBy(R => r.CountyDescr) 。凡(R = > r.State == ** **状态&& == r.Country“USA”) .ToList();' – user727500

+1

所以调用部分动作的结果是我与主视图内显示的局部视图县下拉列表。 (目前这个工作。)任何想法如何将选定的代码分配回主视图模型? – user727500