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 ) 中的字段?何时调用子动作/部分视图是否存在任何问题;即,它是否在启动时加载,是否可以使用此方法将用户选择作为查找过滤器包含在内?如果是这样,如何将值传递给子控制器;视野袋?

4

1 回答 1

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);
}
于 2011-10-14T13:49:49.233 回答