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