如何在控制器的操作中访问下拉列表控件ID

时间:2015-05-20 05:42:46

标签: c# asp.net-mvc asp.net-mvc-4 dropdownlistfor

我想实现一个已经在我的同事的asp.net应用程序中编写的函数。我想在asp.net mvc中实现相同的逻辑 但我不知道如何在控制器的操作中获得下拉列表控件的ID 他所做的是通过调用下面显示的函数来填充一个dropdwonlist

Global.BindRigionByApplicationAccess(drpRegion,
                                     ConfigurationManager.AppSettings["ApplicationId"],
                                     ref ErrorMessage);

这里' drpRegion'是dropdownlist的id,在asp.net中只是该函数的简单调用将加载数据。

我在asp.net mvc中执行了以下代码

在视图中

@Html.DropDownList("REGION_CODE", (SelectList)ViewBag.gpregions)

2 个答案:

答案 0 :(得分:2)

您无法访问控制器操作中的下拉列表。请详细了解MVC模式:http://www.microsoftvirtualacademy.com/training-courses/introduction-to-asp-net-mvc http://www.asp.net/mvc/overview/getting-started/introduction/getting-started

您需要创建要绑定的数据列表,并通过返回将数据传递给视图:

return View(myDataViewModel);

之后,您可以使用该数据创建下拉列表。

另请参阅:http://www.asp.net/mvc/overview/views/dynamic-v-strongly-typed-views

答案 1 :(得分:1)

您无法将下拉控件传递给LoadDropDown方法,因为控制器对html控件一无所知。您需要做的是:

  1. 从数据库中获取数据。
  2. 根据数据生成List<SelectListItem>的实例。
  3. List<SelectListItem>的实例传递给视图
  4. 在视图中使用List<SelectListItem>的实例作为@Html.DropDownList辅助方法的第二个参数。
  5. 让我们从DataAccessLib课开始吧。我将创建以下方法,返回Dictionary<string, string>

    public Dictionary<string, string> GetDropdownItems(string sQuery, string sDTextField, string sDValueField)
    {
        Dictionary<string, string> dict = new Dictionary<string, string>();
    
        using (OracleConnection odConn = new OracleConnection(sConnStr))
        {
            odConn.Open();
            OracleCommand odCmd = odConn.CreateCommand();
            odCmd.CommandText = sQuery;
            using (var dr = odCmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    dict[dr[sDValueField].ToString()] = dr[sDTextField].ToString();
                }
            }
        }
        return dict;
    }
    

    然后在Global类中创建以下方法。基本上它设置查询,调用上面的方法,并生成List<SelectListItem>

    的实例
    public static List<SelectListItem> GetRegionDropdownItems(string ApplicationId, ref string ErrorMessage)
    {
        string query = @"SELECT distinct GP_REGION.REGION_MAIN Region_Code,
        R1.REGION_NAME FROM GP_REGION INNER JOIN GP_REGION R1 
        ON GP_REGION.REGION_MAIN = R1.REGION_CODE WHERE GP_REGION.REGION_HAS_DATA='Y'
        AND GP_REGION.REGION_MAIN IN (SELECT DISTINCT AR.BRANCH_CODE FROM PORTAL.UA_APPLN_ROLE AR 
        INNER JOIN PORTAL.UA_GROUP G ON AR.GROUP_CODE = G.GROUP_CODE
        WHERE G.USER_ID = '" + Global.UserId() + "' AND AR.APPLICATION_ID = '" + ApplicationId + "') ORDER BY GP_REGION.REGION_MAIN";
    
        // get the regions from database
        DataAccessLib dal = new DataAccessLib(Global.ConnectionString());
        Dictionary<string, string> regions = dal.GetDropdownItems(query, "REGION_NAME", "Region_Code");
    
        // generate the dropdown items
        List<SelectListItem> ddlItems = new List<SelectListItem>();
        foreach (var key in regions.Keys)
        {
            ddlItems.Add(new SelectListItem() { Selected = false, Text = regions[key], Value = key });
        }
    
        return ddlItems;
    }
    

    然后调用Global.GetRegionDropdownItems并将结果设置为控制器中的ViewBag.Regions

    public ActionResult _GetRegions()
    {
        List<SelectListItem> ddlItems = Global.GetRegionDropdownItems(
                                            ConfigurationManager.AppSettings["ApplicationId"],
                                            ref ErrorMessage);
        ViewBag.Regions = ddlItems;
    
        return PartialView();
    }
    

    最后在视图中使用@Html.DropDownList辅助方法,如下所示

    @Html.DropDownList("REGION_CODE", (List<SelectListItem>)ViewBag.Regions)