【问题标题】:TextboxFor Posting Value when readonlyTextboxFor 在只读时发布值
【发布时间】:2013-01-30 21:30:41
【问题描述】:

我正在我的视图中使用 html 辅助方法创建一个 TextBox。

@Html.TextBoxFor(m => m.Address, new { @readonly = "readonly" })

我希望此文本框在发布时保留其值,即使恶意用户试图更改它。

我在 IE 中测试我的代码,并且可以很容易地使用开发者工具来删除属性“只读”。

在 MVC3 中是否有任何实现在发布时保留文本框的值?我试图避免去数据库获取原始值。

【问题讨论】:

  • 您是否考虑过不更新该特定值?
  • 我希望该值转到不同的控制器,并执行操作。

标签: asp.net-mvc-3


【解决方案1】:

在 MVC3 中是否有任何实现在发布时保留文本框的值?

不,没有。这是不可能的。如果您已将值发送给客户,您将不再信任它。正如您已经发现的那样,用户更改隐藏和只读字段的值是微不足道的。因此,如果这些值不打算由用户修改,它们甚至不应该是 HTML 的一部分。您应该将它们保存在服务器上。好吧,实际上您可以将它们显示为只读字段,只是为了向用户提供信息,但是当提交表单时,不要使用此值,而是使用存储在服务器上的真实值(可能在数据库或您正在使用的任何持久存储中) .

【讨论】:

  • 这就是我更喜欢演示模型的原因。这样我不在乎这些值是否被转发。
  • 你能告诉我什么是演示模型吗?
【解决方案2】:

为什么不尝试序列化您想要保留的所有内容,使用只有服务器知道的密钥对其进行加密,并将加密后的值存储到隐藏的输入中。您仍然可以在表单控制器中显示未加密的值,但在服务器端,您将使用通过隐藏输入发送的加密值进行实际处理。这样,如果恶意用户更改了标准输入,那也没关系,因为您将使用加密副本。我知道这有点像一个响尾蛇,它类似于 Web 表单如何跨帖子维护视图状态。干杯

【讨论】:

  • 我绝对对您的方法感兴趣。我会调查的。
猜你喜欢
  • 2013-08-30
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多