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

时间:2016-02-03 19:16:16

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有多个下拉列表,我想在页面加载时绑定数据,我正在使用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;

}

当我指定

1 个答案:

答案 0 :(得分:1)

您正在使用MVC(模型 - 视图 - 控制器)。您应该将数据分配给Controller中的Model类。您可以在视图中显示模型。 Codeproject - Learn MVC step by step

我有危险吗?当然!产品:&gt;

首先,创建一个包含要显示的数据的ViewModel。它还有一个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
            };
        }
    }}
}

然后创建一个包含两个Actions的Controller,一个用于显示最初的页面[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);
    }
}

The View&#34; Index&#34;显示下拉列表并将填写好的ViewModel提交到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>
}