【问题标题】:How to receive selected Dropdownlist value in [HttpPost] method?如何在 [HttpPost] 方法中接收选定的下拉列表值?
【发布时间】:2010-08-13 11:45:35
【问题描述】:

又是一个新手问题。 ;-)

我正在设置我的视图模型基于 this very helpfull post:

public class My_IndexModel
{
   ...
   public IEnumerable<SelectListItem> My_DropDownList { get; set; }   
   ...
}

请注意我使用的是

IEnumerable<SelectListItem>

能够设置选定的属性。

下拉列表值在控制器中设置:

public ActionResult Index()
{
     ...
     var DropDownList_Values = from value in My_DB.Value
                               select new SelectListItem
                               {
                                   Selected = (value.IsDefault == 1),
                                   Text = value.Value1,
                                   Value = value.Value1
                                };

     ...

     var viewModel = new My_IndexModel
     {  ...
        My_DropDownList = DropDownList_Values.ToList(), 
        ...
     }

     ...

     return View(viewModel);
}

意味着我的 ViewData 模型包含(在我的情况下)一个下拉列表。

下拉列表也显示在我的网站 (*.aspx) 中,如下所示:

<%: Html.DropDownList("MyDropDownListField", 
                      new SelectList(Model.My_DropDownList as IEnumerable, 
                                     "Value",
                                     "Text", 
                                     Model.My_DropDownList
                                    )
                     )%>

到目前为止没问题。

在网站 (*.aspx) 上,我有一个简单的“提交”按钮,它返回所有数据。 我在这里获取提交事件:

[HttpPost]
public ActionResult Index(My_IndexModel model)
{
    if (ModelState.IsValid)
    {
         ... model.My_DropDownList ...
    }
}

但是 DropDownList 是空的!

必须做什么才能获得选定的下拉列表值 在 [HttpPost] 方法中?

【问题讨论】:

  • 我衷心建议您至少阅读一份官方的 ASP.NET MVC 教程——最好是其中包含 DropDownList 的教程。 :) 他们非常擅长让您快速而牢固地掌握视图、操作以及在两者之间传递数据。 asp.net/mvc/tutorials/mvc-music-store-part-2
  • 谢谢。好的。诚然,看一下教程会有所帮助......抱歉发布这样的问题是如此愚蠢。

标签: asp.net-mvc-2


【解决方案1】:

您需要将与DropDownList 同名的属性添加到您在接收帖子的控制器中使用的模型。如果名称匹配,框架会将选定的值放入匹配的模型属性中。

你应该看看使用Html.DropDownListFor helper。

有关更多信息,请参阅我不久前在找出在 MVC 中实现 DropDownList 的最佳方法时发布的这个问题:

Best way of implementing DropDownList in ASP.NET MVC 2?

【讨论】:

  • 非常感谢!这真的很有帮助!但是我仍然有问题要理解/接受(!) ViewModel 的返回值将传递给 Model 只是因为两个类都有一个同名的属性!有点奇怪的数据绑定,不是吗?
  • 最后意味着我们没有像 MVC = 模型、视图和控制器这样的三个“类”的行为。不,我们有四个:模型、视图、控制器和常见的 ViewModel。复选框示例:Model 只需要一个布尔值来携带“被选中”或“未被选中”的信息(public bool checkbox { get ; set;}),但 ViewModel 包含像“public Listcheckbox { get; set;}”这样的属性来处理视图的所有需求。
  • 在这一点上它变得非常奇怪(对我来说):当两个属性具有完全相同的 NAME 时(如我们示例中的 checkbox )是从 ViewModel 传递给 Model 的返回值...
猜你喜欢
  • 1970-01-01
  • 2021-12-17
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
相关资源
最近更新 更多