初始化下拉列表 - 使其保持不变

时间:2013-02-27 01:05:28

标签: c# asp.net asp.net-mvc-4

在我的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;
}

在我的情况下,我在cshtml中使用option,就像这样

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

HttpPost注册方法中,我必须重新初始化选项,否则我将遇到错误“Option is of type string but it must be IEnumerable<SelectListItem> instead”否则

1 个答案:

答案 0 :(得分: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();
}