ASP.Net MVC DropdownList和选定的值

时间:2010-09-02 14:06:39

标签: asp.net asp.net-mvc

我能够为我的MVC项目创建一个下拉列表,但该值未在下拉列表中选择为选定值。它只是从第一个显示整个县列表。值来自数据库。我尝试从以前的帖子中找到它,但它很混乱。请建议我任何想法。

控制器代码

public ActionResult Edit(int i)
{
     var items = new SelectList(db.MST_COUNTRies.ToList(), "COUNTRY_ID", "COUNTRY_NM");
     ViewData["MST_COUNTRies"] = items;
}

查看代码

<%= Html.DropDownList("COUNTRY_ID", (SelectList)ViewData["MST_COUNTRies"])%>

2 个答案:

答案 0 :(得分:6)

我建议您使用强类型视图(不需要ViewData和魔术字符串)。一如既往地定义视图模型类:

public class CountriesViewModel
{
    public int? SelectedCountryId { get; set; }
    public IEnumerable<SelectListItem> Countries { get; set; }
}

然后你的控制器:

public class HomeController : Controller
{
    public ActionResult Index(int? id)
    {
        // TODO: Fetch those from your DB
        var countries = new[] 
        {
            new { Id = 1, Name = "Country 1" },
            new { Id = 2, Name = "Country 2" },
        };

        var model = new CountriesViewModel
        {
            Countries = new SelectList(countries, "Id", "Name", id)
        };

        return View(model);
    }
}

最后是你的强类型视图:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SomeNs.Models.CountriesViewModel>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <%= Html.DropDownListFor(
            x => x.SelectedCountryId, 
            Model.Countries, 
            "-- Select Country --") 
    %>

</asp:Content>

现在,当您拨打/home/index时,您未选择任何国家/地区,但是当您将id传递给此/home/index/2此操作时,您将获得已选择此ID的国家/地区。

备注:如果您使用的是ASP.NET MVC 1.0,则不会使用强类型的DropDownListFor帮助程序,而是可以使用它:

<%= Html.DropDownList(
        "SelectedCountryId", 
        Model.Countries, 
        "-- Select Country --") 
%>

答案 1 :(得分:1)

尝试这样的事情:

public ActionResult Edit(int i)
{
     var items = new SelectList(db.MST_COUNTRies.ToList(), "COUNTRY_ID", "COUNTRY_NM", yourSelectedCountryId);
     ViewData["COUNTRY_ID"] = items;
}

然后在你看来:

<%= Html.DropDownList("COUNTRY_ID"); %>

一些注意事项:

  • 新SelectList()中的“yourSelectedCountryId”参数可用于确定最初应选择的项目。假设COUNTRY_ID是一个i​​nt,这个参数也应该是一个int。
  • 如果使用与DropDownList的名称/ id匹配的IEnumerable填充ViewData,则Html.DropDownList()调用会自动查找并使用它。这就是我将ViewData [“MST_COUNTRies”]更改为ViewData [“COUNTRY_ID”]的原因。它保存了一些代码,我发现自己不得不使用这种方法解决MVC v1中的错误。