在asp.net MVC中存储状态

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等),因为我不想处理会话超时.

Dar*_*rov 8

你可以看一下这篇文章.您可以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)