gpt4 book ai didi

c# - 我应该使用隐藏字段来保留 ASP.Net MVC 中编辑和保存之间的模型字段吗?

转载 作者:行者123 更新时间:2023-11-30 18:32:33 28 4
gpt4 key购买 nike

我是 MVC 的新手,正在尝试遵循最佳实践。

我正在使用现有数据项目为联系人创建一个编辑/保存表单,其中包含多个类,我需要在一个表单上一起加载和保存。

对于联系人,我需要加载一个人的姓名、公司详细信息、电话号码、地址字段等。这些在数据项目中都是一个单独的类,但我想在一个 View 中编辑和保存/模型。问题是我似乎必须将所有必要的 PK 和 FK ID 作为隐藏字段放在我的 View 中,感觉应该有更好的方法来做到这一点......

对于我的模型,我使用现有的数据类对象作为字段:

public class ContactEditModel 
{
public Person PersonObjectName { get; set; }
public Company CompanyObjectName { get; set; }
public Address AddressObjectName { get; set; }
....
}

我为其中的每一个实例化一个对象并将它们加载到我的模型中,我想在提交编辑 View 时保存所有更改。由于我已经在现有数据项目中为这些类(以及完成工作的存储过程)提供了加载和保存方法,因此重用代码似乎比在模型上指定所有字段并重新创建更有意义- 编写代码。但是,如果不在 View 中声明所有隐藏字段,ID(人员、公司、地址等)在保存时不会保留在模型中,因此我必须指定要保留在隐藏项中的每个字段。

隐藏字段代码示例如下:

     @Html.HiddenFor(model => model.PersonObjectName.ID)
@Html.HiddenFor(model => model.PersonObjectName.Version)
@Html.HiddenFor(model => model.PersonObjectName.CompanyID)
@Html.HiddenFor(model => model.AddressObjectName.ID)
@Html.HiddenFor(model => model.AddressObjectName.AddressTypeID)
@Html.HiddenFor(model => model.AddressObjectName.Version)
.....

如果您有任何关于更好的方法来执行此操作的想法,我们将不胜感激。谢谢。

最佳答案

这类问题的答案总是“视情况而定”,其中很大一部分取决于个人喜好或您的行事方式。

例如,我不希望包括所有这些 ID,而是有一个父 ID,然后我可以使用它在 POST 上查找其他 ID。这意味着你只需要保存一个隐藏字段(或者甚至只是让它成为 url 的一部分,所以没有隐藏的必要)。在您的情况下,可能是 PersonObjectName.ID。

如果您不想再进行一次查找,那么您可以包含这些 ID,但是您需要考虑这是否是敏感信息。例如,如果有人使用 Fiddler 将 Address id 更改为其他内容,会发生什么情况?您现在必须添加逻辑以确保不允许用户更新与其 ID 无关的地址。

关于c# - 我应该使用隐藏字段来保留 ASP.Net MVC 中编辑和保存之间的模型字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18517544/

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