您可以在下拉菜單控制不能傳遞到LoadDropDown
方法,因爲控制器不知道HTML控件什麼。你需要做的是以下幾點:
- 從數據庫中獲取數據。
- 基於數據的
List<SelectListItem>
一個實例。
- 傳遞的
List<SelectListItem>
實例的視圖
- 使用的
List<SelectListItem>
實例如在視圖@Html.DropDownList
輔助方法的第二個參數。
讓我們從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
helper方法在你看來如下
@Html.DropDownList("REGION_CODE", (List<SelectListItem>)ViewBag.Regions)
不清楚你的要求。你想,當你回來後,還是要預先選擇當你第一次渲染視圖選項來獲得下拉的選擇的價值? –
我不認爲你可以在asp.net mvc中使用'Global.BindRigionByApplicationAccess'方法。控制器不應該知道關於html控件的任何信息。你可以添加'Global.BindRigionByApplicationAccess'方法的代碼嗎?如果我們知道該方法做了什麼,也許我們可以重新創建一個在MVC中工作的類似方法。 – ekad
@ekad我解答了我的問題 – peter