【发布时间】:2009-12-31 09:36:15
【问题描述】:
我正在构建一个 asp.net MVC 2 应用程序。
我有一个列表视图,它根据参数列出项目。在数据库中,我有一个父子表,因此我的列表视图列出了父 ID 与参数中指定的值匹配的所有子记录。
这是我的控制器和模型:
public ActionResult List(int ParentID)
{
return View(new Models.ChildListModel(ParentID));
}
public class ChildListModel
{
public int ParentID {get;set;}
public ManagementUserListModel(int iParentID)
{
this.ParentID = iParentID;
this.Children = DataAccessLayer.ListChildrenForParent(iParentID);
}
public List<Child> Children {get;set;}
}
我还有一个详细信息并为该控制器创建操作。详细信息和创建视图有一个“返回列表”操作,我想返回到列表视图,并保持原来的 ParentID。到目前为止,我一直在通过在列表、编辑、创建和详细信息视图中创建一个名为 ParentID 的隐藏字段来执行此操作,以便正确填充模型的 ParentID 属性:
<%= Html.HiddenFor(model => model.ParentID) %>
然后在每个视图的“返回列表”操作中,我传递 ParentID:
<%=Html.ActionLink("Back to List", "List", new {ParentID = Model.ParentID}) %>
这一切都有效,但我不喜欢在 html 中存储原始 ID。有没有更好的方法来做到这一点?是否有一些内置方法来加密数据(有点像标准的 asp.net 视图状态?)我只是想实现某种防篡改,并试图避免使用会话状态(TempData 等),因为我不想处理会话超时。
【问题讨论】:
-
ViewState 是 base64 编码的,很容易“解密”。我想问题是,为什么不使用原始的商店 ID?它有什么问题?