私はMVC3プロジェクトを持っており、c#とRazorを使用して開始しています。使用する入力フィールドが約20個あるページがあります。ビューモデルを作成してデータをビューに渡し、ページを作成します。ユーザーがフォームを送信したときに、フィールドの値を取得する方法について混乱しています。
コントローラには、ページのすべての入力フィールドにパラメータが必要ですか?コントローラにページ上のすべてのデータを取得させて、それを解析できるようにする方法はありますか?パラメータリストは膨大になります。
私はMVC3プロジェクトを持っており、c#とRazorを使用して開始しています。使用する入力フィールドが約20個あるページがあります。ビューモデルを作成してデータをビューに渡し、ページを作成します。ユーザーがフォームを送信したときに、フィールドの値を取得する方法について混乱しています。
コントローラには、ページのすべての入力フィールドにパラメータが必要ですか?コントローラにページ上のすべてのデータを取得させて、それを解析できるようにする方法はありますか?パラメータリストは膨大になります。
ビューに渡したのと同じモデルを、後続のアクションのパラメーターとして使用できます。
例:
//This is your initial HTTP GET request.
public ActionResult SomeAction() {
MyViewModel model;
model = new MyViewModel();
//Populate the good stuff here.
return View(model);
}
//Here is your HTTP POST request; notice both actions use the same model.
[HttpPost]
public ActionResult SomeAction(MyViewModel model) {
//Do something with the data in the model object.
}
2番目のメソッドのモデルオブジェクトは、HTTPリクエストに含まれるデータから自動的に入力されます(技術名は「モデルバインディング」です)。
コントローラのアクションでは、ビューに戻したのと同じ「モデル」を受け取ることを期待してください。これは、「入力コントロール」を適切に生成した場合に機能します(属性を使用するか、モデルのプロパティと同じ名前にHtml.TextBoxFor()
設定することによって)。Name
public ActionResult MyAction(MyViewModel model)
{
...
}
注MVCは、ModelBinderを使用して、ユーザーから送信されたフィールドに基づいて、アクションが期待されるオブジェクトのプロパティを作成および入力する方法を理解します。
ユーザーからのすべての入力をキャプチャする場合は、次のタイプのオブジェクトを受け取るようにアクションを実行できますFormCollection
。
public ActionResult MyAction(FormCollection values)
{
...
}
モデルをパラメーターとして、コントローラーでmvcアクションを作成してください
Like this:
[HttpPost] or [HttpGet]
public ActionResult Employee(EmployeeModel employee)
{
// now you will have all the input inside you model properties
//Model binding is doen autoamtically for you
}