2011-01-04 16 views
0

私は新しいユーザー登録フォームでMVCを学習し、MVCアプリケーションでDropDownを使用しています。これは悪いようです。これはどのように行うべきですか? Asp.Net MVCとドロップダウン

私の画面のほとんどには、2つのコントローラメソッドがあります。 1つはGET(画面の最初の表示)用で、もう1つはPOST(ユーザーが[送信]ボタンをクリックしたとき)用です。私はコピーしたコードを掲示しています

 public ActionResult UserRegistration() 
    { 
     SelectList list = new SelectList(SiteUserRepository.GetTimezones(), "timezone_id", "location"); 
     ViewData["timezones"] = list; 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult UserRegistration(SiteUserModels.SiteUserRegistrationModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      SiteUserRepository.CreateUser(model.username, model.email, model.password, model.firstname, model.firstname, model.timezone_id); 
      return RedirectToAction("Index", "Home"); 
     } 
     SelectList list = new SelectList(SiteUserRepository.GetTimezones(), "timezone_id", "location"); 
     ViewData["timezones"] = list; 
     return View(); 
    } 

注:ここでは

コードです。ドロップダウン(SelectList)のコードがコピーされています。 ViewDataは最初のリクエストでしか利用できないことがわかったので、投稿用に再実行する必要がありました(ユーザーが無効なデータを入力した場合、画面が返されます)

これを行う良い方法はありますか?

答えて

2

あなたのケースでは、非ポストアクションのActionResultを返すようにしてください。

[HttpPost] 
public ActionResult UserRegistration(SiteUserModels.SiteUserRegistrationModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     SiteUserRepository.CreateUser(model.username, model.email, model.password, model.firstname, model.firstname, model.timezone_id); 
     return RedirectToAction("Index", "Home"); 
    } 
    return UserRegistration(); 
} 

通常、ビューにはエラーが発生しましたが、追加のデータが必要です。その場合、冗長性を避けるためにSelectListの作成を別の方法にリファクタリングします。

+0

パーフェクト!それを指摘してくれてありがとう。 100%動作します。次にエラーチェックを追加します。 – Craig

関連する問題