Javascript 带有ajax的MVC视图更新部分视图,返回按钮问题

Javascript 带有ajax的MVC视图更新部分视图,返回按钮问题,javascript,c#,jquery,ajax,model-view-controller,Javascript,C#,Jquery,Ajax,Model View Controller,我有一个包含四个下拉列表的视图,它们充当匹配产品项的结果列表的过滤器,每个列表都通过ajax使用部分视图进行更新,第一个视图除外。第一个下拉列表在第一次渲染视图时预先填充,其余下拉列表在用户从“父”下拉列表中选择项目时刷新。选择最终下拉列表中的一项后,将通过另一个ajax调用填充另一个局部视图,以显示过滤结果 所有这些都可以正常工作,除非用户导航到另一个页面,然后使用“上一步”按钮返回到此页面。返回时,唯一包含数据的列表是第一个下拉列表 我可以很容易地使用jQuery$(文档)。准备好重新填充列

我有一个包含四个下拉列表的视图,它们充当匹配产品项的结果列表的过滤器,每个列表都通过ajax使用部分视图进行更新,第一个视图除外。第一个下拉列表在第一次渲染视图时预先填充,其余下拉列表在用户从“父”下拉列表中选择项目时刷新。选择最终下拉列表中的一项后,将通过另一个ajax调用填充另一个局部视图,以显示过滤结果

所有这些都可以正常工作,除非用户导航到另一个页面,然后使用“上一步”按钮返回到此页面。返回时,唯一包含数据的列表是第一个下拉列表

我可以很容易地使用jQuery
$(文档)。准备好重新填充列表,除此之外,我需要以前在每个下拉列表中选择的值,以便将列表还原为用户留下的方式。问题是,只有第一个下拉列表(未使用ajax填充的列表)是我唯一可以从中获取之前选择的值的列表。所有其他变量的值均为“null”

如何检索/保留其他下拉列表的值,以便在返回页面时重置所有内容?我看到过许多关于类似问题的帖子,但从我所能看出,所有这些帖子似乎都涉及回发,这不是这里的问题

数据模型:

public class ATVApplicationsPageModel : BaseViewModel
{
    public List<iplItem> IplItemList { get; set; }
    public string SelectedMake { get; set; }
    public string SelectedModel { get; set; }
    public string SelectedPolarisCode { get; set; }
    public string SelectedProductGroup { get; set; }
    public string SelectedYear { get; set; }
    public List<SelectListItem> Makes { get; set; }
    public List<SelectListItem> Models { get; set; }
    public List<SelectListItem> PolarisCodes { get; set; }
    public List<SelectListItem> ProductGroups { get; set; }
    public List<SelectListItem> Years { get; set; }
}
年代码部分视图:

@model nhcdist.com.Models.ATVApplicationsPageModel

@Html.DropDownListFor(model => model.SelectedYear, Model.Years, new { @class = "ATVYearDropDown form-control", onchange = "getModels();" })
其他部分视图与年份部分视图相同,只是使用了适当的列表信息

对于下拉列表,级联顺序是make、year、Models、PolarisCodes,然后是ProductGroups

用于更新每个部分的JavaScript:

function getYears() {
    $.ajax({
        type: "POST",
        url: "/Products/RefreshATVYearList",
        data: { Make: $("#SelectedMake").find(":selected").text() }
    })

   .done(function (data) {
       $("#YearList").html(data);
       getModels();
   })
}

每个javascript函数更新相应的下拉列表,然后调用级联链中的下一个javascript函数来发送该下拉列表中的选定值,并按顺序更新其后的下一个下拉列表。与视图一样,每个下拉列表都有自己的javascript函数,如上面的getYears()函数,只涉及自己下拉列表的数据。

您可以序列化字段,并通过ajax将它们发送到页面卸载上的服务器。当服务器获取变量时,您可以通过cookie或会话存储它们。然后在页面加载时检查它们并重新填充数据。您不能将用户的选择存储在会话变量中吗?每次他们进行更改时,您都会访问服务器,然后您可以将该值存储到会话变量的属性中。这主意不错。我将尝试将选择存储在cookies中,因为我已经将其用于其他信息。您可以序列化字段并通过ajax将其发送到页面卸载上的服务器。当服务器获取变量时,您可以通过cookie或会话存储它们。然后在页面加载时检查它们并重新填充数据。您不能将用户的选择存储在会话变量中吗?每次他们进行更改时,您都会访问服务器,然后您可以将该值存储到会话变量的属性中。这主意不错。我将尝试将选择存储在cookies中,因为我已经将其用于其他信息。
function getYears() {
    $.ajax({
        type: "POST",
        url: "/Products/RefreshATVYearList",
        data: { Make: $("#SelectedMake").find(":selected").text() }
    })

   .done(function (data) {
       $("#YearList").html(data);
       getModels();
   })
}