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 に答える