我有一个视图,其中包含四个下拉列表,这些列表充当匹配产品项的结果列表的过滤器,每个下载列表都通过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()函数,只是关于它自己的下拉列表的数据。