私のビューモデルでは、私はデータベースから取り出してビューに送信するアイテムのリストを持っています。私はPostアクションを打ち、モデルを返す必要があるとき(オプションのプロパティを補充しなくても済むようにすることが可能かどうかを知りたいと思います。投稿アクションのモデルデータを再利用
ウェブフォームでは、これは必要ではありません。
:わかりませんでした。私の問題は、DropDownListsに使用するSelectListオプションです。すべてがポストされますが、ビューに戻らなければならない場合(モデルが無効です)、データベースからオプションをリロードする必要があります。これを避けることができるかどうかを知りたい。
私のviewmodel:
public class TestModel
{
public TestModel()
{
Departments = new List<SelectListItem>();
}
public string Name { get; set; }
public int Department { get; set; }
public IEnumerable<SelectListItem> Departments { get; set; }
}
マイビュー:
@model MvcApplication1.Models.TestModel
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Name)
@Html.DropDownListFor(m => m.Department, Model.Departments)
<input type=submit value=Submit />
}
マイコントローラ(HttpPostにコメントを気づくん):事前に
public ActionResult Index()
{
TestModel model = new TestModel
{
Name = "Rafael",
Department = 1,
Departments = new List<SelectListItem>
{
new SelectListItem { Text = "Sales", Value = "1" },
new SelectListItem { Text = "Marketing", Value = "2", Selected = true },
new SelectListItem { Text = "Development", Value = "3" }
}
};
// Departments gets filled from a database.
return View(model);
}
[HttpPost]
public ActionResult Index(TestModel model)
{
if (!ModelState.IsValid)
{
//Do I have to fill model.Departments again!?!?!?
return View(model);
}
else { ... }
}
感謝。
編集: FYI、私の解決策は、Session
変数を使用することでした。
私の編集を見てください。 – rebelliard
OK今はどういう意味か分かります。私は同じ問題が私の最後のプロジェクトを思い付いていた。残念なことに、HTTPポストを使用することは、本質的にモデルをキーと値のペアに相当するものに制限することになります。つまり、プロパティーがコントローラーに戻されるたびに、より多くのビジネス・オブジェクトを持つ複雑なモデルを作成することはできません。そのため、部門リストを永続的に保管しなければなりません。セッションが完了すると、それをクリアする限り、セッションはこれに適しています。実際には、ワイヤでオブジェクトを送信する必要がある場合は、JSONなどのシリアル化技術を使用する必要があります。 – jhsowter
私は参照してください。隠し入力またはSession []オブジェクト内のJSONからデータを戻すことをお勧めしますか?ありがとう。 – rebelliard