保留.net mvc中的数据

时间:2009-09-15 03:39:09

标签: .net asp.net-mvc

我正在实现一个带有结果页面支持分页的搜索模块。 NerdDinner提供的示例将pagenumber作为Index操作的参数传递,并且每次用户点击不同的页码时,操作都使用pagenumber执行查询。

我的问题是我的搜索采用了更多的标准,如价格,材料,型号等,而不仅仅是简单的页面编号。因此,我想在用户首次提交后保留标准,以便我只需要来回传递分页编号。

无法使用ViewData,因为ViewData在发送到View后会被清除。

有没有什么好方法可以保留标准数据?

1 个答案:

答案 0 :(得分:2)

你几乎有两种方法可以做到这一点。

  1. 将要保留的数据放在可序列化的会话,缓存或数据库中。将它放在数据库中将是最安全的选择,但它会降低您的性能。

  2. 您可以将保留的数据存储在隐藏的html标记中。只要信息不敏感,此选项应该可以正常工作。

  3. 这里有一些支持代码。您只能在同一个控制器中使用它

    public class questionController : Controller
    {
        public QuestionFormData qdata;
    
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            qdata = (SerializationUtil.Deserialize(Request.Form["qdata"])
                ?? TempData["qdata"]
                ?? new QuestionFormData()) as QuestionFormData;
            TryUpdateModel(qdata);
        }
    
        protected override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            if (filterContext.Result is RedirectToRouteResult)
            {
                TempData["qdata"] = qdata;
            }
        }
    

    访问这样的更新信息

        public ActionResult Index()
        {
             DateTime d = qdata.date;
        }
    

    在aspx页面中

    <%= Html.Hidden("qdata", SerializationUtil.Serialize(Model)) %>