如何在控制器的操作中访问下拉列表控件 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 控件一无所知。您需要做的是:
- 从数据库中获取数据。
- 根据数据生成
List<SelectListItem>
的实例。
- 将
List<SelectListItem>
的实例传递给视图
- 在视图中使用
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)
我想实现一个已经在我的 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 控件一无所知。您需要做的是:
- 从数据库中获取数据。
- 根据数据生成
List<SelectListItem>
的实例。 - 将
List<SelectListItem>
的实例传递给视图 - 在视图中使用
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)