使用ajax更新部分视图的MVC视图,后退按钮问题

时间:2015-07-16 22:20:48

标签: javascript c# jquery ajax model-view-controller

我有一个视图,其中包含四个下拉列表,这些列表充当匹配产品项的结果列表的过滤器,每个下载列表都通过ajax更新,部分视图除了第一个。第一个下拉列表在首次呈现视图时预先填充,其余部分在用户从" parent"中选择一个项目时进行刷新。落下。当选择最终下拉列表中的项目时,另一个部分视图将通过另一个ajax调用填充,以显示过滤结果。

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

我可以轻松地使用jQuery $(document).ready重新填充列表,除此之外,我需要先前在每个下拉列表中选择的值,以便将列表恢复为用户离开它们的方式。问题是,只有第一个下拉列表(未使用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; }
}

代码制作下拉列表(主要父级下拉列表):

@Html.DropDownListFor(model => model.SelectedMake, Model.Makes, new { @class = "ATVMakeDropDown form-control", onchange = "getYears();"})

年份代码部分视图:

@model nhcdist.com.Models.ATVApplicationsPageModel

@Html.DropDownListFor(model => model.SelectedYear, Model.Years, new { @class = "ATVYearDropDown form-control", onchange = "getModels();" })

其他部分视图与年份部分视图相同,只使用适当的列表信息。

对于下拉列表,级联顺序是Makes,Years,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()函数,只是关于它自己的下拉列表的数据。

0 个答案:

没有答案
相关问题