C# 在mvc中从视图发布IEnumerable集合
我正在开发一个ASP.NETMVC应用程序,填充dropdownlist以查看get方法中的工作情况。我正在填充以在我的控制器中这样查看C# 在mvc中从视图发布IEnumerable集合,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我正在开发一个ASP.NETMVC应用程序,填充dropdownlist以查看get方法中的工作情况。我正在填充以在我的控制器中这样查看 [HttpGet] public ActionResult CreateEmployeeFamilyDetails(EmployeeSuperClass employeeSuperClass, int i = 0) { employeeSuperClass.FamilyDetailsFields = new FamilyList(); empl
[HttpGet]
public ActionResult CreateEmployeeFamilyDetails(EmployeeSuperClass employeeSuperClass, int i = 0)
{
employeeSuperClass.FamilyDetailsFields = new FamilyList();
employeeSuperClass.FamilyDetailsFields.familyMembersList.Insert(0, new EmployeeFamilyTable());
*employeeSuperClass.FamilyDetailsFields.employee_RelationTable = dt.GetRelations();*
*employeeSuperClass.FamilyDetailsFields.employee_BloodGroupTable = dt.GetBloodGroups();*
*employeeSuperClass.FamilyDetailsFields.employee_NationalityTable = dt.GetNationalities();*
return View("CreateEmployeeFamilyDetails", employeeSuperClass);
}
请看星号线
如果模型中有任何错误,我将获得空引用
在post-action方法中,如下所示
[HttpPost]
public ActionResult CreateEmployeeFamilyDetails(EmployeeSuperClass employeeSuperClass, string Command)
{
if (ModelState.IsValid)
{
return("some view");
}
else
{
return view(employeeSuperClass);
}
}
我再次知道,我们必须创建实例来填充dropdownlist,这是垃圾,一次又一次地做同样的事情
有人能解释一下如何在视图中单独存储下拉列表集合,并将它们与模型一起发布吗?
(注意:employee\u relationTable
是IEnumerable
集合,它是一种relationTable类型。此表包含关系id和relationname字段,并且在此类中使用此表,如下所示
public IEnumerable<EmployeeRelationTable> employee_RelationTable { get; set; }
public IEnumerable employee_RelationTable{get;set;}
对于其余部分,我也使用相同的方法
我们可以从视图发布员工关系表吗?如何发布
请提供帮助,我们将非常感谢您的帮助假设
dt
是所有方法都可用的成员字段,您可以做的是使用单独的方法来消除视图模型中下拉列表的填充,例如
private void PopulateDropDownsOnViewModel(EmployeeSuperClass model)
{
model.FamilyDetailsFields = new FamilyList
{
employee_RelationTable = dt.GetRelations(),
employee_BloodGroupTable = dt.GetBloodGroups(),
employee_NationalityTable = dt.GetNationalities()
}
}
可用于Get
:
[HttpGet]
public ActionResult CreateEmployeeFamilyDetails(EmployeeSuperClass employeeSuperClass, int i = 0)
{
PopulateDropDownsOnViewModel(employeeSuperClass);
return View("CreateEmployeeFamilyDetails", employeeSuperClass);
}
以及在Post
中(以及需要下拉列表的任何其他控制器操作)
如果下拉列表是静态的,您还可以查看缓存这些内容,以防止浪费对数据库的IO
但是不,不要以某种方式序列化视图中的数据(记住
WebForms ViewState
?)或者直接从视图中获取数据-这违反了MVC范式-控制器负责为视图提供要呈现的数据。你不应该这样做。将所有数据发送到客户端,然后再通过线路返回只会减慢你的应用程序的速度。创建一个填充数据的私有函数,并从GET和POST调用它方法和如果您担心数据库调用,请考虑将集合存储在会话中。
[HttpPost]
public ActionResult CreateEmployeeFamilyDetails(EmployeeSuperClass employeeSuperClass, string Command)
{
if (ModelState.IsValid)
{
return("some view");
}
else
{
PopulateDropDownsOnViewModel(employeeSuperClass);
return View(employeeSuperClass);
}
}