ASP.net MVC の場合:
フォーム データ (ビューから) をコントローラーに渡すにはどうすればよいですか?
これは私が向かっている方法です:
- Controller Index 関数は、ViewModel オブジェクトをビューに渡しています。
- ViewModel オブジェクトには、ページ分割されたリストといくつかの SelectLists が含まれています。_ ViewModel オブジェクトには、theFilter という名前のカスタム クラスも含まれています。このクラスの目的は、フォームを介してビューから投稿されたフィルター情報を保持することです。
- Index [AcceptVerbs(HttpVerbs.Post)] 関数で、フォーム データが入力された Filter オブジェクトとページ番号を受け取るようにしたい (現在はそのまま)
ここに私のコードのスニペットがあります:
コントローラー/インデックスのポストバック関数:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(int? page, CaseFilter caseFilter)
{
const int pageSize = 10;
var cases = caseRepo.FindAllCases();
var paginatedCases = new PaginatedList<Case>(cases, page ?? 0, pageSize);
return View(new CaseIndexViewModel(paginatedCases, caseFilter));
}
フィルター クラス:
public class CaseFilter
{
int iVolume_id = 0,
iSubject_id = 0;
public CaseFilter() {
}
public int Volume_id { get { return iVolume_id; } set { iVolume_id = value; } }
public int Subject_id { get { return iSubject_id; } set { iSubject_id = value; } }
}
そして ViewModel クラス:
public class CaseIndexViewModel
{
public PaginatedList<Case> PaginatedCases { get; private set; }
public CaseFilter CaseFilter { get; private set; }
public CaseIndexViewModel(PaginatedList<Case> paginatedCases, CaseFilter caseFilter)
{
PaginatedCases = paginatedCases;
CaseFilter = caseFilter;
}
}
基本的に、Request.Form を使用して Filter クラスにデータを入力することを避けようとしています。少なくとも Controller 内で使用しないようにしています。
ヘルプ、提案、またはディスは大歓迎です!