gpt4 book ai didi

c# - MVC 编辑存储在隐藏字段中的复杂对象

转载 作者:搜寻专家 更新时间:2023-11-01 04:09:18 26 4
gpt4 key购买 nike

假设我有一个非常庞大的模型,其中包含列表,甚至这些列表也可以包含包含其他列表的对象。我想在没有 AJAX 的 MVC4(或 5)中为此创建一个编辑表单。

所以我认为第一部分是将整个对象存储在客户端的隐藏字段中。列表绑定(bind)就像一个魅力,请参阅 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ .现在完整的往返正在运行,我可以将整个对象推送到绑定(bind)隐藏字段中的客户端,它在提交时返回给我,发布的隐藏字段被放入复杂对象、嵌套列表和包含的所有内容。

列表或其他对象应该根据某些操作变得可编辑。一种情况是单个对象或列表项显示为不可编辑,当用户单击它时,它就可以就地编辑,例如,网格中的单元格变成文本框。另一种情况是根本不显示单个对象或列表项,当用户单击按钮时,会出现一个带有文本输入字段的弹出窗口。

是否有图书馆或行之有效的方法来做到这一点?

最佳答案

Is there a library or a proven way to do this?

究竟是为了什么?在 View 中显示大型模型以进行编辑?使网格可编辑?还是弹出一个网格的记录进行编辑?

基本上,我认为你把这件事复杂化了一点。如果您在这里应用一些关注点分离,您会发现一切变得多么容易,事实上它非常容易实现,最重要的是更容易维护和扩展。

从模型开始,假设您有一个名为 Company 的强大模型,它具有以下属性:

  • 公司 ID(整数)
  • 公司名称(字符串)
  • CompanyLegalID(字符串)
  • 公司注册号(字符串)
  • ContactInfo(ContactInfo 类)
  • HeadQuaterAddress(“地址”类)
  • 分支(Branch 类的列表)
  • 员工(员工 类列表)

而且属性列表可以一直持续下去。将这个模型分解成更小的模型会更容易, super 容易。制作具有以下属性的 CompanyModel 模型...

  • 公司 ID(整数)
  • 公司名称(字符串)
  • CompanyLegalID(字符串)
  • 公司注册号(字符串)

然后做一个CompanyContactInfo模型等等。明白了吗?同样,关注点分离大大简化了事情。然后,创建操作方法和 View 来读取/编辑这些模型。

现在,对于大型对象的列表属性,您也想做同样的事情。例如,对于 Employee 对象列表,创建具有以下属性的 CompanyEmployeesModel 模型会更容易:

  • 公司编号(整数)
  • 员工(EmployeeModel 类列表)

然后创建一个 Controller 操作方法来显示员工列表...

public ActionResult EmployeeList(int companyId)
{
var employees = BusinessLogic.Get_Me_Employees_For(companyId);
CompanyEmployeesModel model = new CompanyEmployeesModel();
model.CompanyId = companyId;
model.Employees = employees;

return View(model);
}

希望你到目前为止已经明白了。在 View 中简单地创建一个 css 格式的表来显示员工列表,razor 使它变得 super 简单......

<table class="grid">
<tr>
<th></th>
<th>
Name
</th>
<th>
Phone
</th>
</tr>

@{
var alt = false;

foreach (var emp in Model.Employees)
{
<tr class="@(alt ? "alt" : string.Empty)">
<td class="cmd">
@ActionLink("edit", "Edit", "Employees", new { empId = emp.Id}, null)
</td>
<td>@emp.Name</td>
<td>@emp.Phone</td>
</tr>

alt = !alt;
}

}
</table>

请注意,表的第一列有链接“edit”,将用户带到 Employee Controller 的 Edit 操作方法,显然您将在其中执行与您一直在使用较小的模型一样。我所做的只是分离逻辑、模型和 View ,并使它们更简单、更易于维护和更易于理解。

希望这一切对你有意义

关于c# - MVC 编辑存储在隐藏字段中的复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20885123/

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