私は機知に富んでいて、どこを見るべきかいくつかの指針が必要です。
次のような MVC Ajax フォームがあります。
<div id="totalPartial">
<table>
@foreach (Application application in Model.Applications)
{
<tr>
<td>
@Html.DisplayFor(m => application.Candidate.Client.ClientName)
</td>
<td>
@Html.DisplayFor(m => application.Candidate.FirstName)
</td>
<td>
@Html.DisplayFor(m => application.Test.TestName)
</td>
<td>
@{ Model.SelectedSession = application.Session; }
@using (Ajax.BeginForm("Plan", "Keuring",
new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "totalPartial",
HttpMethod = "POST"
},
new {id = "form" + application.Id, name = "form" + application.Id}))
{
@Html.HiddenFor(m => application.Id)
@Html.DropDownListFor(m => application.Session.Id, Model.SessionsInclNotPlanned, new {@class = "sessiondropdown", onchange = "$(this.form).submit()"})
}
</td>
</tr>
}
</table>
</div>
繰り返しでテーブル行が追加されるたびに、ドロップダウンリストが生成され、関連するセッションが選択されます。チャームとして機能します-最初にロードされたとき。
ユーザーが別のセッションを選択すると、現在のテーブルを置き換えるための ajax 呼び出しが行われます (したがって、totalPartial が更新されます)。キャッチで動作します。このポストバックでは、すべてのドロップダウン ボックスで選択された値は、選択された値と同じです (独自の値を保持する必要があります)。選択された値は、メソッドでアクティブに設定されます。
@{ Model.SelectedSession = application.Session; }
Model.SessionsInclNotPlanned
完全にリロードすると、チャームとして再び機能します。この Ajax ポストバックだけで、最初の選択がすべてのリスト ボックスに反映されます...
どこを見る?fiddler を確認したところ、Ajax リクエストからの戻り値がブラウザーで (誤って) 表示されるため、サーバー側でエラーが発生します。それでも - リストボックスの入力をデバッグすると、正しく読み取られます。