2010-08-10 31 views
2

又是一个新手问题。 ;-)如何在[HttpPost]方法中接收选定的Dropdownlist值?

我基于 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]方法中获得所选下拉列表值 必须做些什么?

+0

我非常乐意推荐通过的至少一个会官方的ASP.NET MVC教程 - 最好是一个带有DropDownList的教程。 :)他们非常擅长让你快速而牢固地掌握视图,行动和两者之间的数据传递。 http://www.asp.net/mvc/tutorials/mvc-music-store-part-2 – bzlm 2010-08-10 08:10:34

+0

Thx。好。诚然,看教程将有助于...抱歉,因为这么愚蠢而无法发布这样的问题。 – user415876 2010-08-10 08:18:42

回答

1

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

你应该看看使用Html.DropDownListFor帮手。

欲了解更多信息,请参阅这个问题我贴了一段时间后,当我有问题,找出最好的方式来实现MVC一个DropDownList:

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

+0

非常感谢!这真的很有用!但是我仍然有理解/接受(!)___ViewModel___的返回值将被传递给___Model__的问题,只是两个类都有一个同名的属性!不知何故奇怪的数据绑定,不是吗? – user415876 2010-08-13 04:00:52

+0

最后意味着这种行为,我们没有三个“类”像MVC =模型,视图和控制器。不,我们有四个:模型,视图,控制器和常见的___ViewModel___。示例复选框:___Model___只需要一个bool来携带“已选择”或“未选中”(public bool __checkbox__ {get; set;})信息,但___ViewModel___包含一个属性,如“public List __checkbox__ { get; set;}“来处理视图的所有需求。 – user415876 2010-08-13 04:10:11

+0

和它变得非常奇怪(对我来说)在这一点上:当两个属性具有完全相同的__NAME__(如我们的示例中的__checkbox__)是从ViewModel传递给Model的返回值... – user415876 2010-08-13 04:12:22

相关问题