gpt4 book ai didi

c# - 从 mvc 中的 View 发布 IEnumerable 集合

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:24 24 4
gpt4 key购买 nike

我正在开发一个 ASP.NET MVC 应用程序,填充下拉列表以查看在 get 方法中工作正常。我正在填充以在我的 Controller 中查看这样的内容

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

请查看加星标的行

如果模型中有任何错误,我会得到空引用

在后期操作方法中看起来像这样

[HttpPost]
public ActionResult CreateEmployeeFamilyDetails(EmployeeSuperClass employeeSuperClass, string Command)
{
if (ModelState.IsValid)
{
return("some view");
}
else
{
return view(employeeSuperClass);
}
}

我再次知道我们必须创建实例来填充下拉列表这是垃圾一次又一次地做同样的事情

任何人都可以解释如何在 View 中单独存储下拉列表集合并将它们也与模型一起发布吗?(注意:employee_relationTableIEnumerable 集合,它是一个关系表类型,此表包含关系 ID 和关系名称字段,我在此类中使用此表,如下所示

public IEnumerable<EmployeeRelationTable> employee_RelationTable { get; set; }

对于休息,我也使用相同的方法

我们可以从 View 中发布 employee_RelationTable 吗?如何发布?

请帮忙,我们将不胜感激

最佳答案

假设 dt 是所有方法都可用的成员字段,您可以做的是在单独的方法中干掉 View 模型中 DropDown 的数量,例如

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 中(以及任何其他需要下拉菜单的 Controller 操作)

[HttpPost]
public ActionResult CreateEmployeeFamilyDetails(EmployeeSuperClass employeeSuperClass, string Command)
{
if (ModelState.IsValid)
{
return("some view");
}
else
{
PopulateDropDownsOnViewModel(employeeSuperClass);
return View(employeeSuperClass);
}
}

如果下拉菜单是静态的,您还可以考虑缓存它们以防止对数据库的 IO 浪费。

但是不,不要以某种方式序列化 View 中的数据(还记得 WebForms ViewState 吗?)或直接从 View 获取数据——这违反了 MVC 范式—— Controller 负责提供要呈现的 View 的数据。

关于c# - 从 mvc 中的 View 发布 IEnumerable 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27142758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com