@Html.DropDownListFor を含むビューがあります。フォーム/ビューが読み込まれるときに、モデル プロパティの 1 つに値 (IEnumerable) がある場合、対応するデータを含む一連の div が作成されます。そのプロパティに値がない場合 (別名 Count() == 0)、フォームに単一のボタンを表示することになっています (これにより、そのプロパティのデータが作成されます)。
そのため、ユーザーがドロップダウンからオプションの 1 つを選択すると、現在のフォーム/ビューにデータを入力したのとまったく同じアクション メソッドに対して ajax 呼び出しを実行しますが、今回は id フィールドに値を送信します。
アクションメソッドにブレークポイントがあり、それがヒットしていることを確認しました。正しいパラメーター値があり、ビューに渡されるモデルの正しいデータを作成しますが、モデルがビューを再入力すると、フォーム上のアイテム/コントロールはどれも変更されません。私はcshtmlファイルにブレークポイントを入れても、正しいデータでそこを通り抜けています。
だから、ここに私のコントローラーがあります:
public ActionResult Index(int? id)
{
var seasonId = id;
if (seasonId == null)
{
var player = _playerRepository.Query().FirstOrDefault(p => p.PlayerId == _userIdentity.PlayerId);
if (player.DefaultSeasonId != null)
seasonId = (int)player.DefaultSeasonId;
else
{
return View(new ScheduleModel
{
Player = player,
AvailableSeasons = _seasonRepository.Query().Select(s => s)
});
}
}
return View(CreateScheduleModelForSeason((int)seasonId));
}
これが私の見解の始まりです:
@model LeagueManager.Models.ScheduleModel
@{
ViewBag.Title = "Schedule(s)";
}
<div class="row">
@Html.LabelFor(m => m.AvailableSeasons)
@Html.DropDownListFor(m => m.SelectedSeasonId, new SelectList(Model.AvailableSeasons, "SeasonId", "SeasonName"), new { id = "seasonSelect" })
</div>
<form method="post" action="Schedule/GenerateSchedule">
<h2>The Season's Schedules/Weeks and Matchups</h2>
<div>
<div>
@if (Model.SchedulesAndMatches == null || (Model.SchedulesAndMatches != null && !Model.SchedulesAndMatches.Any()))
{
<input type="submit" class="btn btn-primary" value="Generate Schedule" />
}
</div>
そして、ここに ajax 呼び出しがあります:
@* Season Selector *@
$('select#seasonSelect').change(function () {
var selectedSeasonId = $(this).val();
$.ajax({
url: '/Schedule/Index',
data: { id: selectedSeasonId }
});
});
繰り返しますが、実際のコードはすべて機能しています。ビューを再レンダリングしていないだけです...
例: id = 1 で ActionResult メソッドを呼び出すと、スケジュール全体が読み込まれます。ドロップダウンを介して id = 2 に切り替えると (その後、ajax を介して再度呼び出されます)、同じスケジュールのままになります。
反対に、id = 2 で ActionResult メソッドを呼び出すと、単一のボタンがロードされます。ドロップダウンから id = 1 に切り替えると、モデルに正しいデータが再入力されますが、ビュー/フォームには新しい情報が反映されません。
助けてください!