Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在mvc中从视图发布IEnumerable集合_C#_Asp.net Mvc 4 - Fatal编程技术网

C# 在mvc中从视图发布IEnumerable集合

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

我正在开发一个ASP.NETMVC应用程序,填充dropdownlist以查看get方法中的工作情况。我正在填充以在我的控制器中这样查看

[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);
     }
 }