0

だから私は StackOverflow をよく見て、私の問題に対する素晴らしい解決策を見つけました。

MVC3 DropDownListFor - 簡単な例? 、これは私のためにそれを行う必要があります。しかし、それはnull値を返しました...どういうわけか、これを回避する方法がわからないので、助けていただければ幸いです。

モデル AccountModel.cs

...
public string Address { get; set; }
public string City { get; set; }

public class StateList
{
    public int StateID { get; set; }
    public string Value { get; set; }
}

public IEnumerable<StateList> StateListOptions = new List<StateList>
{
    //new StateList { StateID = -1, Value = "Select State" },
    new StateList { StateID = 0, Value = "NY" },
    new StateList { StateID = 1, Value = "PO" }
};

public string State { get; set; }

public string Zip { get; set; }
...

Register.cshtml

@Html.DropDownListFor(m => m.State, new SelectList(Model.StateListOptions, "StateID", "Value", Model.StateListOptions.First().StateID))

何らかの理由で null を出力したのではないかと思いStateID = -1ましたが、そうではありませんでした。ここでコメントアウトされていることがわかります。私は何を間違えましたか?!

アクションを取得

public ActionResult Register()
{
    ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

    return View();
}
4

1 に答える 1

3

Model/ViewModel のオブジェクトを作成し、それをビューに送信します。

public ActionResult Register()
{    
    AccountModel vm=new AccountModel();

    //Not sure Why you use ViewData here.Better make it as a property
    // of your AccountModel class and pass it.
    ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

    return View(vm);
}

これで、ビューはこのモデルに強く型付けされる必要があります

だからあなたのRegister.cshtml見解では、

@model AccountModel
@using(Html.BeginForm())
{
   //Other form elements also
   @Html.DropDownListFor(m => m.State, new SelectList(Model.StateListOptions, 
                                                "StateID", "Value")"Select")
   <input type="submit" />

}

POST で選択状態を取得するには、StateProperty 値を確認できます。

[HttpPost]
public ActionResult Register(AccountModel model)
{
   if(ModelState.IsValid)
   {
      // Check for Model.State property value here for selected state   
      // Save and Redirect (PRG Pattern)
   }
   return View(model);
}  
于 2012-08-24T11:08:57.067 に答える