我正在实现一个带有结果页面支持分页的搜索模块。 NerdDinner提供的示例将pagenumber作为Index操作的参数传递,并且每次用户点击不同的页码时,操作都使用pagenumber执行查询。
我的问题是我的搜索采用了更多的标准,如价格,材料,型号等,而不仅仅是简单的页面编号。因此,我想在用户首次提交后保留标准,以便我只需要来回传递分页编号。
无法使用ViewData,因为ViewData在发送到View后会被清除。
有没有什么好方法可以保留标准数据?
答案 0 :(得分:2)
你几乎有两种方法可以做到这一点。
将要保留的数据放在可序列化的会话,缓存或数据库中。将它放在数据库中将是最安全的选择,但它会降低您的性能。
您可以将保留的数据存储在隐藏的html标记中。只要信息不敏感,此选项应该可以正常工作。
这里有一些支持代码。您只能在同一个控制器中使用它
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)) %>