Передача выбранного значения из частичного представления в модель представления основного вида - PullRequest
2 голосов
/ 14 октября 2011

Как новичок ASP.Net MVC3, у нас есть проблема, с которой хотелось бы помочь. (Вопросы внизу этой темы тоже.)

Прежде всего, я не уверен, что следующее - лучший способ сделать это, поэтому, пожалуйста, дайте мне знать, если мы движемся в неправильном направлении. Мы хотели бы использовать частичные представления для поиска выпадающих списков. В некоторых случаях поиск будет выполняться в нескольких местах, а также, данные не являются частью нашей модели представления. Данные могут поступать из базы данных или веб-службы в нашем приложении. Некоторые данные загружаются при запуске, а некоторые основаны на других значениях, выбранных в форме.

Мы вызываем дочернее действие из нашего основного представления и возвращаем частичное представление с полученными нами данными. Как только пользователь выбирает свой выбор, мы не уверены, как сохранить код выбранного элемента в нашей модели основного вида.

В нашей основной форме мы призываем к действию:

@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 Ответ

1 голос
/ 14 октября 2011

Вы можете передать его в качестве параметра дочернему действию:

@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);
}
...