我有一个主页,其中包含几个下拉控件,一个网格,几个文本框等。使用下拉change event
,网格将根据下拉选择重新加载新数据。
示例:如果下拉列表包含值All,Limited,Exceptional
。对于下拉列表中的每个项目,围栏值都将不同,对于初始加载,我将使用All
数据。
情况如下
第1步:用户进入主页(现在他正在查看所有数据)
第2步:他使用下拉列表过滤了值“ Limited”的数据(现在他只看到网格中的有限数据)
第3步:然后他从网格中选择一个项目,这会将用户带到该项目的详细信息页面。
第4步:用户单击详细信息页面中的后退按钮,这将提供历史记录后退功能,并将用户带到主页,因为控制器方法再次点击该页面会重新加载并填充所有数据。 代替此行为,我想向用户显示“受限”数据(用户进入“详细信息”页面之前过滤的数据)。
在MVC中是否有任何机制可以缓存数据?
The method what I am planning to go with 1:
当前,我正计划将下拉选择数据发送到下一个页面请求,并且当用户单击“后退”按钮时,我会将其发送回主页控制器,并基于该值,我可以得到我想要的过滤信息。
The method what I am planning to go with 2:
将过滤器数据保存到浏览器存储中,当用户返回该页面时,检查是否存在此数据,并基于此重新加载网格。
如果我有很多过滤条件,例如不同的下拉列表,不同的文本框等,上述方法将很困难,那么还有其他方法可以做到吗?像使用控制状态缓存上一页一样?
这就是我在详细信息页面上单击后退按钮所要做的
$("#btnBack").click(function () {
window.history.back();
});
Edit:
我使用Kendo网格填充数据,是的,这是Kendo默认的Ajax调用用于获取数据。
@(Html.Kendo().Grid<ModelName>()
.Name("SomeGrid")
.Columns(columns =>
{
columns.Bound(p => p.NAME).Title("Name").Width("26%")
.ClientTemplate("<a href=\"" + @Url.Content("~/ControllerName/ActionName/Details/#=DOCKEY#") + "\">#=PTR_NAME#</a>");
columns.Bound(p => p.UPN).Title("UPN").Width("10%");
})
.Sortable()
.Scrollable(scrollable => scrollable.Virtual(true).Height(400))
.DataSource(dataSource => dataSource
.Ajax()
.Sort(p => p.Add(m => m.LNAME))
.PageSize(10000)
.Read(read => read.Action("Action", "ControllerName"))
)
.Filterable()
.ColumnMenu()
.Events(events => events.DataBound("onDataBound"))
.Pageable(p => p.Refresh(true).PreviousNext(false).Numeric(false))
)
有人可以帮助我解决这个问题吗?
答案 0 :(得分:0)
最后使用浏览器的会话状态存储数据。
步骤1:在发生页面更改之前,将页面的当前状态保存在json对象中,并将其保存在会话存储中
$(window).bind('beforeunload', function() {
//Get the current state of the page and store it in the browser session as json string
});
注意::存储当前状态意味着保存输入值,下拉选择,网格过滤器等
第2步:下次用户进入此页面时,请检查会话是否为空。
第3步:如果会话不为空,则读取数据并在视图中填充会话数据以保留状态
第4步:清除会话