我正在我的视图中使用 html 帮助器方法创建一个 TextBox。
@Html.TextBoxFor(m => m.Address, new { @readonly = "readonly" })
我希望这个文本框在发布时保留其值,即使恶意用户试图更改它。
我正在 IE 中测试我的代码,并且可以轻松地使用开发人员工具来删除属性“只读”。
MVC3 中是否有任何实现在发布时保留文本框的值?我试图避免去数据库获取原始值。
我正在我的视图中使用 html 帮助器方法创建一个 TextBox。
@Html.TextBoxFor(m => m.Address, new { @readonly = "readonly" })
我希望这个文本框在发布时保留其值,即使恶意用户试图更改它。
我正在 IE 中测试我的代码,并且可以轻松地使用开发人员工具来删除属性“只读”。
MVC3 中是否有任何实现在发布时保留文本框的值?我试图避免去数据库获取原始值。
MVC3 中是否有任何实现在发布时保留文本框的值?
不,没有。这是不可能的。如果您已将价值发送给客户,您将不再信任它。正如您已经发现的那样,用户更改隐藏和只读字段的值是微不足道的。因此,如果这些值不打算由用户修改,它们甚至不应该是 HTML 的一部分。您应该将它们保存在服务器上。好吧,实际上您可以将它们显示为只读字段,只是为了向用户提供信息,但是当提交表单时,不要使用此值,而是使用存储在服务器上的真实值(可能在数据库或您正在使用的任何持久存储中) .
为什么不尝试序列化您想要保留的所有内容,使用只有服务器知道的密钥对其进行加密,并将加密的值存储到隐藏的输入中。您仍然可以在表单控制器中显示未加密的值,但在服务器端,您将使用通过隐藏输入发送的加密值进行实际处理。这样,如果恶意用户更改了标准输入,那也没关系,因为您将使用加密的副本。我知道这有点绕口,它类似于 Web 表单跨帖子维护视图状态的方式。干杯