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

How to access a dropdown list control id in action of controller

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

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

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

我在 asp.net mvc

中做了以下代码

可见

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

您无法在控制器操作中访问下拉列表。请详细了解 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

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

  1. 从数据库中获取数据。
  2. 根据数据生成 List<SelectListItem> 的实例。
  3. List<SelectListItem>的实例传递给视图
  4. 在视图中使用 List<SelectListItem> 的实例作为 @Html.DropDownList 辅助方法的第二个参数。

让我们从DataAccessLib class开始。我将创建以下方法 returns a 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 class 中创建以下方法。基本上它设置查询,调用上述方法,并生成 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)