1

カスケード ドロップダウン リストのセットを作成しようとしています。メイン ビューは 2 つの部分ビューのセットで構成されています。

@model  WebUI.Controllers.IndexViewModel
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

<table cellpadding="0" cellspacing="4" border="0">
<tr>
    <td>Category </td>
    <td> :</td>
    <td>@Html.Partial("ParentsUserControl", Model)</td>
</tr>
<tr>
    <td>Sub - Category </td>
    <td> :</td>
    <td><div id="Children">@Html.Partial("ParentChildrenUserControl", Model)</div></td>
</tr>

</table>

各部分ビューには、ドロップダウン付きの AJAX フォームがあります。

@model WebUI.Controllers.IndexViewModel

@using (Ajax.BeginForm("SelectParent", "Ticket", new AjaxOptions { UpdateTargetId = "Children" }))
{ 
@Html.DropDownListFor(
        m => m.SelectedParenId,
        new SelectList(Model.AvailableParents, "EstablishmentId", "Name"),
       string.Empty
    )
}

<script type="text/javascript">
$('#SelectedParenId').change(function () {
    $(this).parents('form').submit();
});
</script>

問題は、最初のリストの項目をクリックするとすぐに、新しいページが 2 番目の部分ビューでレンダリングされることです。新しいページを生成せずに、メイン ビュー内の部分ビューをレンダリングするにはどうすればよいですか? UpdateTargetId は何を参照していますか?

また、ユーザーが選択した値をコントローラーに戻すにはどうすればよいですか? 私が作成しているのはすべてテーブルですが、そのテーブルをフォーム内に配置する必要がありますか?

前もって感謝します!

4

2 に答える 2

1

はい テーブルをフォーム内に配置すると、フレームワークはすべてのモデル値をモデル ラッパー内に自動的に保存します。これはモデル バインディングと呼ばれ、コントローラー アクションで直接使用できます。

于 2013-10-03T09:23:15.007 に答える
1

web.cnfig ファイルに次のキーが追加されているかどうかを確認できますか

<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
于 2013-10-03T09:21:02.890 に答える