ASP.NET MVC 2 DropDownList未设置选定值

时间:2012-02-08 16:35:37

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

我正在尝试使用所选值填充下拉列表值。 我提到了相关的文章,我也在做同样的事情。 Still Dropdown未填充所选值。不确定我错过了什么。

控制器代码:

var RegionId = new[] { 
                new RegionKeyValues { RegionId = 1, RegionValue = "A" }, 
                new RegionKeyValues { RegionId = 2, RegionValue = "B" }, 
                new RegionKeyValues { RegionId = 3, RegionValue = "D" } 
            };
ViewData["RegionId"] = new SelectList(RegionId, "RegionId", "RegionValue", 1); 

查看代码:

<%= Html.DropDownList("RegionId",
                      (SelectList)ViewData["RegionId"],
                      "-- Select --")%>

3 个答案:

答案 0 :(得分:5)

我认为问题在于您的属性名称是RegionId,以及ViewData名称。改变一个,看看会发生什么。

答案 1 :(得分:2)

我会尝试<%=Html.DropDownList("RegionId", new SelectList((IEnumerable)ViewData["RegionId"], "Value", "Text",1),"-- Select --")%&gt;

在实际视图中设置值。

一般情况下,我会创建一个强类型的ViewModel,并创建将选择列表值存储为IEnumerable<SelecListItem>

的属性

然后你可以做

<%=Html.DropDownListFor(a=>a.RegionId, new SelectList(Model.Regions, "Value", "Text"),"-- Select --")`%>

其中RegionId是要设置的实际值,Model.Regions存储可能的区域列表。

总的来说,我觉得控制器和列表,视图模型等的好方法在这篇文章中here

答案 2 :(得分:1)

丽塔

以下是我对此的努力:

模特:

namespace MvcApplication1.Models
{
    public class RegionKeyValues
    {
        public int RegionId { get; set; }
        public string RegionValue { get; set; }
    }

    public class RegionKeyValuesViewModel
    {
        public int SelectedRegionId { get; set; }
        public IEnumerable<RegionKeyValues> RegionList { get; set; }
    }
}

控制器操作:

public ActionResult Index()
{
    var regionList = new[] { 
        new RegionKeyValues { RegionId = 1, RegionValue = "A" }, 
        new RegionKeyValues { RegionId = 2, RegionValue = "B" }, 
        new RegionKeyValues { RegionId = 3, RegionValue = "D" } 
    };

    var viewModel = new RegionKeyValuesViewModel
    {
        RegionList = regionList, 
        SelectedRegionId = 1 // hardcoded here, but in real-life, from the db
    };

    ViewData.Model = viewModel;

    return View();
}

查看代码(在Razor中):

@model MvcApplication1.Models.RegionKeyValuesViewModel
@{
    ViewBag.Title = "Home Page";
}

@Html.DropDownListFor(a => a.SelectedRegionId, 
    new SelectList(Model.RegionList, "RegionId", "RegionValue", 
        Model.SelectedRegionId), "-- Select --")

基本上,我将一个强类型的ViewModel传递给视图,并在控制器中设置选定的RegionId并将其传递给Model.SelectedRegionId。在一个真实的应用程序中,你显然是从db或其他一些结构中获取viewModel。

值得考虑作为替代方案。