私は post-redirect-get 設計パターンについて多少読んだことがありますが、アプリケーションのように見えるように設計された MVC サイトであるため、それが私の目的に合っているかどうかはわかりません。ページに複数のドロップダウンがあります。私のコントローラーでは、以下のようにすべて整数配列にバインドします。
[HttpPost]
public ViewResult ResponseForm(PartyInvites.Models.GuestResponse response, int[] SelectedCustomer)
{
return View(response); // works but resets all my selected dropdowns
// return View(); // gives an error that it can't rebind items in view
}
私の見解:
@foreach (Schedule sched in Model.Schedules)
{
@Html.DropDownList("MySelectedCustomer", new SelectList(sched.Customers, "Id", "FirstName"), "Select A Customer", new { @class = "SelectedCustomer" })
}
ゲストレスポンス:
public class GuestResponse
{
[Required(ErrorMessage = "You must enter your name")]
public string Name { get; set; }
public string SomeString = "someString";
public string Email { get; set; }
public string Phone { get; set; }
public bool? WillAttend { get; set; }
public int SelectedSchedule = 0;
public int SelectedCustomer = 0;
public List<Schedule> Schedules
{
get
{
return new List<Schedule>() { new Schedule() { ScheduleName = "party1", ScheduleId = 1 }, new Schedule() { ScheduleId = 2, ScheduleName = "party2" } };
}
set
{
Schedules = value;
}
}
}
SelectCustomer プロパティは、GuestResponse クラスのプロパティです。すべてのドロップダウンがバインドされており、いくつか変更すると、int[] SelectedCustomer コレクションに適切にバインドされます。ただし、ビューを元に戻したい (本質的には何もしない) が、複数のドロップダウンがあり、MVC がバインドをモデル化できなかったため、応答が完全にバインドされなかったため、すべてのドロップダウンが元の状態にリセットされます。いわば状態を維持するためにこれを行う最良の方法は何ですか?