如何通过 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;

}

当我分配时

如何通过 Ado.net 使用 MVC 从数据库绑定多个下拉列表

您正在使用 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>
}