我有一个模型:
public class Attribute
{
public int Id { get; set; }
public string Key { get; set; }
public string Value{ get; set; }
}
假设我的视图将显示@model IEnumerable<MyCustomer.ViewModels.Attribute>
,我想为我的键和值做一个EditorFor
,但我只想保留我的 Id,而无需在回发后不将其放入回发控件中。 我怎样才能做到这一点?我知道我可以把它放在一个隐藏的地方,但一个隐藏的东西可以修改,我不确定这是最安全的做法。 我正在向我的视图传递一个新的属性[],并且需要预设Id
下面的帖子通过为隐藏字段创建值的安全哈希来提供解决问题的方法。
这篇文章还链接到一篇带有SecuredValueHtmlHelper源代码的文章,这听起来正是你所需要的。
防止更改隐藏字段
我怎样才能做到这一点?
HTML的工作方式没有奇迹。无论您在 HTML 表单中放入什么内容,您都会在回发时返回。无论你省略什么,你都会松懈。
所以你有几个可能性:
- 将值存储在 ASP.NET 会话变量中,以便以后检索。
- 使用回发时发送的键和值属性查询数据存储和 Id(仅当键/值对是唯一的并且在数据存储中具有相应的 Id 属性时,此操作才有效)。
- 将 Id 属性的值存储在可在回发时检索的加密 Cookie 中。为此,您可以使用
FormsAuthentication.Encrypt/Decrypt
方法。