2

私のmvc4アプリケーションでは、このように登録するページにドロップダウンリストを設定しました

AccountModel.cs の HttpGet Register メソッドで、このコードでデータを初期化します

public ActionResult Register()
{
   MyModel mm=new MyModel();
   mm.mydropdown=new []
   { 
      new SelectListItem{Value="value", Text="text"}
      ////...
   };
}

このページがロードされたときにのみ、そのコードが実行されます。しかし、メソッドで書き直す必要がないように、コンパイルする必要があるコードスニペットを挿入mydropdownし、アプリケーションで常に初期化できる場所はありますか?[HttpPost]

【追記】mymodelクラス はこちら

public class Register
{
   [Required(ErrorMessage="Option is required")]
   public string option;

   public IEnumerable<SelectListItem> Options;
}

私の場合、optionこのようにcshtmlで使用します

@Html.DropDownListFor(m=>m.option, Model.Options,"Select an item")

HttpPostRegister メソッドで、オプションを再初期化する必要があります。そうしないと、エラー " "Option is of type string but it must be IEnumerable<SelectListItem> insteadが発生します

4

1 に答える 1

1

このように拡張IEnumerable<SelectListItem>して行うことができます

public class MyDropDownList : IEnumerable<SelectListItem> 
{
    public MyDropDownList()
    { 
          SelectedListItem item = new SelectListItem{Value="value", Text="text"};
          this.Add(item);
    }
}

または、コンストラクターに書き込むこともできますMyModel

public class Register
{
    [Required(ErrorMessage="Option is required")]
    public string option;

    public IEnumerable<SelectListItem> Options;
    public Register()
    {
         this.Options = new []
         { 
            new SelectListItem{Value="value", Text="text"}
            ////...
         };
    }
}
public ActionResult Register()
{
   Register mm = new Register();
}
于 2013-02-27T01:14:44.850 に答える