Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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# 后置不可编辑值_C#_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 后置不可编辑值

C# 后置不可编辑值,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我有一个视图和一个模型(比如汽车)。表单中的一个字段是可编辑的(仅显示其他信息)。发布视图表单时,我需要所有信息,而不仅仅是可编辑属性。但所有其他属性都为空 我过去常常创建隐藏字段来发布数据,但如果隐藏字段比非隐藏字段多,则会生成非常脏的代码 有没有一种方法可以在不使用隐藏字段的情况下发布模型的所有属性?以html形式发布的数据就是输入的内容。我不认为有隐藏字段有什么问题,如果你在帖子上需要这些数据,它就是隐藏字段的用途 也就是说,如果你真的想减少隐藏字段的数量,你可以在一个字段中“序列化”所有

我有一个视图和一个模型(比如汽车)。表单中的一个字段是可编辑的(仅显示其他信息)。发布视图表单时,我需要所有信息,而不仅仅是可编辑属性。但所有其他属性都为空

我过去常常创建隐藏字段来发布数据,但如果隐藏字段比非隐藏字段多,则会生成非常脏的代码


有没有一种方法可以在不使用隐藏字段的情况下发布模型的所有属性?

以html形式发布的数据就是输入的内容。我不认为有隐藏字段有什么问题,如果你在帖子上需要这些数据,它就是隐藏字段的用途

也就是说,如果你真的想减少隐藏字段的数量,你可以在一个字段中“序列化”所有这些信息,然后在文章中“反序列化”。或在自定义模型活页夹中


但是,如果您想要Asp.NETMVC中开箱即用的ModelBinder的魔力,您必须使用表单字段。

在html表单中发布的数据就是输入的内容。我不认为有隐藏字段有什么问题,如果你在帖子上需要这些数据,它就是隐藏字段的用途

也就是说,如果你真的想减少隐藏字段的数量,你可以在一个字段中“序列化”所有这些信息,然后在文章中“反序列化”。或在自定义模型活页夹中


但是,如果您想要Asp.Net MVC中开箱即用的ModelBinder的魔力,您必须使用表单字段。

如果您被指定将信息发布在隐藏字段中,另一个选项是将它们包含在查询字符串中。

如果您被指定将信息发布在隐藏字段中,另一个选项是将它们包括在查询字符串中。

您应该使用仅具有可编辑字段的ViewModel。 在视图中,只需将模型的id作为隐藏字段放置在数据库中

在控制器中,从数据库获取模型。然后检查是否确实可以修改此项(例如,有人可以使用Firebug更改隐藏字段中的id)

然后,只需使用ViewModel中的字段更新数据库模型。。。然后再次将模型保存到数据库中


如果你在视图中使用你的汽车模型,有人可能会更改超出你允许范围的字段。。。如果使用CarViewModel,这是不可能的,因为模型绑定器将只绑定viewmodel的属性。

您应该使用仅具有可编辑字段的viewmodel。 在视图中,只需将模型的id作为隐藏字段放置在数据库中

在控制器中,从数据库获取模型。然后检查是否确实可以修改此项(例如,有人可以使用Firebug更改隐藏字段中的id)

然后,只需使用ViewModel中的字段更新数据库模型。。。然后再次将模型保存到数据库中


如果你在视图中使用你的汽车模型,有人可能会更改超出你允许范围的字段。。。如果您使用CarViewModel,这是不可能的,因为模型绑定器将只绑定viewmodel的属性。

您认为隐藏字段不合适的原因是什么?您似乎必须使用viewmodel模式并接受CarViewMode实例(其中只有必填/可编辑字段)而不是Car。然后可以将您的CarViewModel映射到汽车对象。更多信息:将不可编辑的字段传递给客户机并返回不是这样做的方法。它效率低下(传输所有数据只是为了让您的生活更轻松)而且存在安全风险(好奇的用户更改了您没有预料到的值)。在服务器上管理合并要好得多。@SimonHalsey如果服务器端编码良好,则没有安全风险:例如,如果您没有使用来自客户端的所有值更新实体,但您有一个只更新允许更新的内容的服务(可编辑属性逐可编辑属性),没问题。@ken2k你是对的,但我认为如果我们对所有数据进行往返以保存重新加载数据,我们可能不会检查保存的字段。为什么你认为隐藏字段不合适?似乎你必须使用ViewModel模式并接受CarViewMode实例(只有必需/可编辑字段)而不是这里的汽车。然后可以将您的CarViewModel映射到汽车对象。更多信息:将不可编辑的字段传递给客户机并返回不是这样做的方法。它效率低下(传输所有数据只是为了让您的生活更轻松)而且存在安全风险(好奇的用户更改了您没有预料到的值)。在服务器上管理合并要好得多。@SimonHalsey如果服务器端编码良好,则没有安全风险:例如,如果您没有使用来自客户端的所有值更新实体,但您有一个只更新允许更新的内容的服务(可编辑属性逐可编辑属性),没问题。@ken2k你是对的,但我认为如果我们在重新加载数据时对所有数据进行往返保存,我们可能不会检查保存的字段。使用查询字符串可能比使用隐藏字段更糟糕。至少对于隐藏字段,用户看不到您传递的内容。使用查询字符串可能比使用隐藏字段更糟糕。至少对于隐藏字段,用户看不到您传递的内容+1“按id从DB获取模型,只更新允许的内容,保存到DB”我也认为这是正确的方法。。。使用带有可编辑字段的ViewModel+模型主键,并添加
@Html.HiddenFor(model=>model.Id)
以查看,并使用ViewModel更新db…+1“按Id从db获取模型,只更新允许的,保存到db”我也认为这是正确的方法。。。使用带有可编辑字段+模型主键的ViewModel,并添加
@Html.HiddenFor(model=>model.Id)
以查看,并使用ViewModel更新数据库。。。