【问题标题】:Initialising a dropdownlist - make it constant初始化下拉列表 - 使其保持不变
【发布时间】:2013-02-27 01:05:27
【问题描述】:

在我的 mvc4 应用程序中,我在页面上设置了下拉列表,像这样注册

在 AccountModel.cs 的 HttpGet Register 方法中,我用这段代码初始化了它的数据

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

只有在页面加载时,该代码才会运行;但是有没有什么地方我可以插入必须编译的代码 sn-p 并让我的mydropdown 始终在应用程序中初始化,这样我就不必在[HttpPost] 方法中重写它?

[更新] 这是mymodel

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

   public IEnumerable<SelectListItem> Options;
}

就我而言,我在 cshtml 中像这样使用option

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

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

【问题讨论】:

  • 我喜欢帮助类(我称它们为"composers")来设置我的模型。这样,我可以进行一次调用并从任意数量的方法中准备模型。当您有许多要重新填充的属性时,它变得非常有用。为了回答您最初的问题,没有任何自动状态管理(就像在网络表单中那样)使下拉菜单“正常工作”。
  • 非常感谢蒂姆:D,我会尽快跟进您的建议。
  • 没问题。您的问题是一个很好的问题……控制器经常变得难以管理,因为他们开始对他们正在准备的视图模型“做太多”。

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


【解决方案1】:

你可以扩展 IEnumerable&lt;SelectListItem&gt; 并这样做

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();
}

【讨论】:

  • 谢谢,在我的 OP 中,mydropdown 对象被声明为 public IEmumerable&lt;SelectListItem&gt; mydropdown。如果我使用你的方法,那我如何重新声明变量并在cshtml页面中使用它?
  • 我根据你所说的稍微修改了我的答案,但是为什么不在MyModel类的初始化过程中这样做呢?您还可以发布MyModel 课程以更好地了解有哪些可用选项吗?
  • 好的,然后看我的第二个例子。在你的 Register 类中创建一个构造函数,就像我展示的那样。
  • 谢谢,我现在可以使用您对构造函数方法的建议消除HttpPost 中的冗余代码。 :)
猜你喜欢
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 2020-12-21
相关资源
最近更新 更多