【问题标题】:Getting values from an asp.net mvc dropdownlist从 asp.net mvc 下拉列表中获取值
【发布时间】:2009-09-09 08:00:08
【问题描述】:

有人可以帮我从 asp.net mvc 的下拉列表中获取值吗?

我可以从文本框等中获取值...但是,我如何获得这两个东西...

  1. 从控制器类中获取下拉列表的选定项值
  2. 从控制器类中获取下拉列表的所有项目列表

谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    您可以像获取文本框一样从下拉列表中获取选定的值。

    使用默认模型绑定

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult GetValueExample(string MyList) {
      //MyList will contain the selected value
      //...
    }
    

    或来自 FormCollection

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult GetValueExample(FormCollection form) {
      string val = form["MyList"];
      //...
    }
    

    或来自请求

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult GetValueExample(string MyList) {
      string val = Request.Form["MyList"];  //or
      val = Request["MyList"];
      //...
    }
    

    您的下拉列表被命名为“MyList”。

    <%= Html.DropDownList("MyList", MyItems) %>
    

    或直接的 HTML

    <select name="MyList">
      <option value="1">Item 1</option>
      <option value="2">Item 2</option>
    </select>
    

    浏览器只会提交从下拉列表中选择的值,而不是所有其他值。要获取所有其他项目的列表,您应该首先调用填充列表的代码(假设您使用了 Html.DropDownList())。

    更新

    [AcceptVerbs(Http.Get)]
    public ActionResult GetValueExample() {
      ViewData["MyItems"] = GetSelectList();
      return View();
    }
    
    [AcceptVerbs(Http.Get)]
    public ActionResult GetValueExample(string MyList) {
      //MyList contains the selected value
      SelectList list = GetSelectList(); //list will contain the original list of items
      //...
    }
    
    private SelectList GetSelectList() {
      Dictionary<string, string> list = new Dictionary<string, string>();
      list.Add("Item 1", "1");
      list.Add("Item 2", "2");
      list.Add("Item 3", "3");
      return new SelectList(list, "value", "key");
    }
    
    //...
    
    <%= Html.DropDownList("MyList", ViewData["MyItems"] as SelectList) %>
    

    【讨论】:

    • 但是,你说的是被选中的项目吗?那么,如何检索列表中的所有项目?
    • 正如我所说,浏览器只会将选中的项目值提交回服务器。从列表中获取所有项目的唯一方法是执行与将它们放入那里相同的操作(无论是什么)。以我的更新为例。
    • 感谢您非常完整的回答:)
    【解决方案2】:

    好吧,由于您提供的信息太少,因此很难正确回答,但通常您会在控制器的 post 方法中获得选定的值。

    这样的事情可能会更好地解释它:

    考虑有这个下拉列表:

      //instantiate the dropdownlist in the controller method.
      public ActionResult Create() {
         List<string> items = new List<string>() {"first", "second", "third"};
         SelectList SomeSelectItems = new SelectList(items);
         ViewData["list"] = SomeSelectItems;
        return View();      
      }
      <%= Html.DropDownList("DDL", (SelectList)ViewData["list"]) %>
    

    在您的控制器中,您将获得如下下拉列表的值:

     [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(string DDL)
        {
            string theValue = DDL;
            return View();
        }
    

    从下拉列表中获取所有值与首先将它们放入选择列表中相同。我将假设您有一个方法被调用来用项目填充下拉列表。只需从控制器中调用此方法并适当地处理值。

    【讨论】:

    • 什么是一些选择项?这就是我的困惑
    • 啊,我明白了,好的,我将添加一些代码示例,向您展示如何实例化选择列表。
    【解决方案3】:

    我认为您需要重新考虑这一点。下拉列表的值应该来自控制器并发送到视图以在下拉列表中显示以允许用户选择。然后页面表单将选择的值发送回控制器。数据应始终在服务器端,视图仅用于显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      相关资源
      最近更新 更多