2016-02-03 29 views
0

我有多个下拉列表,我想绑定页面加载数据,我正在使用MVC 4.在单个存储过程中,我选择了数据不同的表格。每个选择一个下拉列表。 这里我给列表赋值,我想把单个列表中的所有东西都返回给控制器。因此我已经给出了单个下拉菜单作为示例。如何通过Ado.net使用MVC从数据库绑定多个下拉列表

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

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

我是否需要编码?当然! :>

首先,您创建一个ViewModel来保存要显示的数据。它还有一个吸气剂,将可能的选项转换为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> 
} 
+0

我想lstcrimsdtls和lstappdtls在单个列表中 – Thiyagarajan

+0

然后调产生所述'的IEnumerable 的方法'以包括来自两个原始列表的选项。请注意,“SelectListItem.Value”是唯一的。 –

+0

对不起,我有沟通不畅,我想要一个包含lstcrimsdtls和lstappdtls的列表。用于下拉的lstappdtls,用于文本框和页面的lstcrimsdtls。 – Thiyagarajan

相关问题