Jer*_*emy 1 asp.net-mvc asp.net-mvc-2
我正在构建一个asp.net MVC 2应用程序.
我有一个列表视图,它根据参数列出项目.在数据库中,我有一个父表和子表,因此我的列表视图列出了父id的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;}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个细节并为该控制器创建操作.详细信息和创建视图有一个"返回列表"操作,我想返回列表视图,并维护原始的ParentID.到目前为止,我一直在通过在列表,编辑,创建和详细信息视图中创建名为ParentID的隐藏字段来实现此目的,以便正确填充模型的ParentID属性:
<%= Html.HiddenFor(model => model.ParentID) %>
Run Code Online (Sandbox Code Playgroud)
然后在每个视图的"返回列表"操作中,我传递了ParentID:
<%=Html.ActionLink("Back to List", "List", new {ParentID = Model.ParentID}) %>
Run Code Online (Sandbox Code Playgroud)
这一切都有效,但我不是在html中存储原始ID的忠实粉丝.有没有更好的方法来做到这一点?是否有一些内置的方式来加密数据(有点像标准的asp.net viewstate呢?)我只是想尝试实现某种防篡改,并试图避免使用会话状态(TempData等),因为我不想处理会话超时.
你可以看一下这篇文章.您可以Html.Serialize在视图中使用新的扩展方法,它允许您序列化整个对象并加密它:
<%= Html.Serialize("person", Model, SerializationMode.Encrypted) %>
Run Code Online (Sandbox Code Playgroud)
将模型序列化为隐藏字段并加密值.要获取模型,请使用DeserializeAttribute表单提交的控制器操作:
public ActionResult Edit([Deserialize]Person person) { }
Run Code Online (Sandbox Code Playgroud)