我在我的Web应用程序中使用MVC 3(RAZOR)。
我有一个简单的“编辑”视图,用于处理员工记录(例如,名字,姓氏,DOB等),但有些数据是敏感和加密的。敏感数据被加密并转换为base 64字符串。敏感数据在编辑视图中不可编辑,但会传递到隐藏字段以“保留”,以便在员工记录中的其他字段需要编辑时,它不会在回发中丢失。
我认为因为这个数据是基数64,所以它不会在隐藏字段中呈现 - 也许它是MVC 3安全性的东西。我还应该提一下,我的模型将此属性标记为必需。所以必须重新填充才能回发。
我是否需要在此属性上放置一个特殊属性来告诉MVC可以在隐藏字段中使用它?还有其他想法吗?
在RAZOR中,我的隐藏字段声明如下:
@Html.HiddenFor(model => model.SomeBase64String)
在HTML中,它会被渲染为:
<input style="margin-right: 5px;" id="SomeBase64String" name="SomeBase64String" value="" type="hidden" data-val="true" data-val-required="SomeBase64String is required.">
base 64字符串的示例可能是:
OW0iSdFXUqaUT82qjqaG5w==
在编辑(GET)控制器操作中,我有以下内容:
public ActionResult Edit(int id)
{
Employee employee;
if (id == 0)
{
employee = Employee.CreateNew();
}
else
{
employee = _employeeDatabaseAccess.GetEmployeeById(id);
//employee.SomeBase64String is already set. it's stored in the db...
}
return View(employee);
}
答案 0 :(得分:1)
确保在渲染视图之前在控制器操作内的视图模型上设置了相应的属性:
model.SomeBase64String = ...
return View(model);
但我建议你不要烦恼任何加密。处理此问题的正确方法是,如果用户不应编辑此信息,则根本不将此信息传递给视图。然后在你的POST控制器动作中,只需使用记录的id从你最初阅读的地方读取这些信息(我猜你正在使用一些数据存储或其他东西)。
您应该只向视图传递用户应该查看和编辑的信息。传递敏感信息就像是在寻找麻烦。
答案 1 :(得分:0)
好吧,我创建了一个示例MVC项目,正如Darin建议的那样,并验证了Base 64字符串可以在隐藏字段中呈现。没问题。我的申请一定有问题。