gpt4 book ai didi

c# - 发布到 Controller 时填充 subview 模型集合

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

我有一个页面,您可以在其中添加公司。一家公司有多名员工。这是我的 View 模型:

public class CompanyViewModel
{
[ScaffoldColumn(false)]
public int CompanyId { get; set; }

public string Name{ get; set; }

public List<EmployeeViewModel> Employees { get; set; }
}

public class EmployeeViewModel
{
[ScaffoldColumn(false)]
public int EmployeeId { get; set; }

public int CompanyId { get; set; }

public string FirstName { get; set; }

public string LastName { get; set; }
}

在我的页面上,我有动态添加/删除员工的 jQuery 功能。当我发布表单时,我的 View 如下所示:

<input id="CompanyId" name="CompanyId" type="hidden" value="0" />

<input id="Name" name="Name" type="text" value="Test company name" />

<input id="Employees[1].FirstName" name="Employees[1].FirstName" type="text" value="fn1" />
<input id="Employees[1].LastName" name="Employees[1].LastName" type="text" value="ln1" />

<input id="Employees[2].FirstName" name="Employees[2].FirstName" type="text" value="fn2" />
<input id="Employees[2].LastName" name="Employees[2].LastName" type="text" value="ln2" />

<input id="Employees[3].FirstName" name="Employees[3].FirstName" type="text" value="fn3" />
<input id="Employees[3].LastName" name="Employees[3].LastName" type="text" value="ln3" />

还有我的 Controller 方法:

[HttpPost]
public ActionResult Create(CompanyViewModel viewModel)
{
...
}

当我在发布表单后通过调试器查看 View 模型中的内容时,Employees 集合为空。 CompanyId 和 Name 被传递,但不传递 Employees 集合。

我还尝试将输入的 ID 和名称从 Employees[1].FirstName 更改为 Model.Employees[1].FirstName,但那没有'帮助。

我在这里做错了什么?

我正在使用 MVC 3 和 Razor。

最佳答案

我可能是错的,但我是这样处理的。

创建一个局部 View 以显示所有员工。创建局部 View 以显示单个员工。

将员工模型传递给员工分部 View ,该分部 View 依次循环并为每个员工呈现员工分部 View 。

然后在运行时,当用户添加员工时,我使用 jQuery ajax 回发到 Controller 。

Controller 添加员工并返回呈现的员工部分控制。

ajax 调用成功,然后(附加)新员工部分 View html 到已经存在的员工列表中。

我的 View 采用包含公司和 List<Employee> 的表单 View 模型

编辑

但是,您可能会考虑为您的 Controller 使用 [bind] 装饰器。

[Bind(Prefix="ContactDetails")] userDetail UserDetail

编辑2

删除员工姓名上的编号。然后在您的 Controller 中,您可以使用以下内容

[HttpPost]
public ActionResult Create(CompanyViewModel viewModel, [Bind(Prefix="Employees")] List<EmployeeViewModel> Employees)
{
...
}

这是我在另一个项目中使用类似的东西的方式

关于c# - 发布到 Controller 时填充 subview 模型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7224706/

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