如何通过 Ado.net 使用 MVC 从数据库绑定多个下拉列表
本文关键字:绑定 数据库 下拉列表 MVC 何通过 Ado net 使用 | 更新日期: 2023-09-27 18:33:14
我有多个下拉列表,我想在页面加载时绑定数据,我正在研究MVC 4。在单个存储过程中,我从不同的表中选择数据。每个选项都有一个下拉列表。在这里,我将值分配给列表,我想将单个列表中的所有内容返回给控制器。在这里,我给出了单个下拉列表作为示例。
public class SampleClass1
{
public string ID { get; set; }
public string Cr_PId { get; set; }
public string Cr_cId { get; set; }
public string Res { get; set; }
public string Descr { get; set; }
public IList<ApplicationMaster> lstappmas { get; set; }
}
public class ApplicationMaster
{
public string ApplicationId { get; set; }
public string ApplicationName { get; set; }
}
public List<CrimsDetailModel> GetCrimsDetails()
{
List<CrimsDetailModel> lstcrimsdtls = new List<CrimsDetailModel>();
List<ApplicationMaster> lstappdtls = new List<ApplicationMaster>();
DataSet dscrmodel = new DataSet();
Hashtable htcrmodel = new Hashtable();
dscrmodel = DataProxy.FetchDataSet("GetCrimDetails");
dscrmodel.Tables[0].TableName = "CRdetails";
dscrmodel.Tables[1].TableName = "ApplicatonMaster";
try
{
foreach (DataRow dr in dscrmodel.Tables["CRdetails"].Rows)
{
CrimsDetailModel objcrmodel = new CrimsDetailModel();
objcrmodel.ID = dr["CR_PaId"].ToString();
objcrmodel.Cr_PId = dr["CR_PId"].ToString();
objcrmodel.Cr_cId = dr["CRIMS_CId"].ToString();
objcrmodel.Res = dr["Res"].ToString();
objcrmodel.Desc = dr["Desc"].ToString();
lstcrimsdtls.Add(objcrmodel);
}
foreach (DataRow dr in dscrmodel.Tables["Appdetails"].Rows)
{
ApplicationMaster objapp = new ApplicationMaster();
objapp.ApplicationId = dr["ApplicationId"].ToString();
objapp.ApplicationName = dr["ApplicationName"].ToString();
lstappdtls.Add(objapp);
}
return lstcrimsdtls;
}
当我分配时
您正在使用 MVC(模型-视图-控制器)。应将数据分配给控制器中的模型类。您可以在视图中显示模型。代码项目 - 逐步学习 MVC
我是否讨厌法典?确实!:>
首先,创建一个保存要显示的数据的视图模型。它还有一个 getter 将可能的选项转换为 Razor 所需的SelectListItem
集合。
public class ContainsADropdownViewModel {
public CrimsDetailModel Selected { get; set; }
// to be read in controller
public IEnumerable<CrimsDetailModel> RawOptions { get; set; }
// generate SelectListItems to be used with DropDownListFor()
public IEnumerable<SelectListItem> Options { get {
foreach (var detail in RawOptions) {
yield return new SelectListItem {
Value = detail.ID, // something unique
Text = detail.Desc, // shown to User
Selected = detail == Selected // stays selected after roundtrip
};
}
}}
}
然后创建一个包含两个操作的控制器,一个用于显示最初[HttpGet]
的页面,另一个用于处理表单[HttpPost]
的回发。
GET 操作应使用 ViewModel 返回强类型视图。这是从数据库中读取的地方!
public class MyDropdownTestController : Controller {
// GET MyDropdownTest/Index
[HttpGet]
public ActionResult Index() {
var vm = new ContainsADropdownViewModel();
vm.RawOptions = GetCrimsDetails(); // read from backend
return View("Index", vm);
}
// POST MyDropdownTest/Index
[HttpPost]
public ActionResult Index(ContainsADropdownViewModel vm) {
var optionChosenByUser = vm.Selected;
// process form, send HTTP 200 OK or whatever
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
}
视图"索引"显示下拉列表,并将填写好的视图模型提交到Html.BeginForm
中指定的发布操作。
// Razor View in Views'MyDropdownTest'Index.cshtml
@model ContainsADropdownViewModel
@using (Html.BeginForm("Index", "MyDropdownTest", FormMethod.Post)) {
@* render dropdown; bind selected value to Model.Selected *@
@Html.DropDownListFor(m => m.Selected, Model.Options)
<button type="submit">Submit</button>
}