页面刷新后从下拉框中保留所选项目

时间:2011-05-13 13:33:22

标签: c# asp.net-mvc

我有一个下拉框,其中包含供用户选择的时间列表。我的问题是,在用户选择他们的选择然后点击提交按钮后,页面将刷新,然后再次将下拉框设置为默认 - 即使页面重新加载后,如何让用户选择保留在下拉框中?我不确定我的代码的哪一部分最需要我的Get和Post很长 - 但是如果有一个通用的例子可以帮助。

来自控制器的代码:

这是我加载到下拉框中的一个列表:

IQueryable<User> users = _userRepository.FindAllForOffice(_currentUser.OfficeId);
            userViewModel.Users = users.ToSelectList("UserId", "FullName",
                                                                   userViewModel.UserId.ToString());

            foreach (SelectListItem view in userViewModel.Users)
            {
                if (!viewData.ContainsKey(view.Text))
                    viewData.Add(view.Text, view.Value + "|user");
            }

这增加了实际的下拉列表:

userViewModel.ViewData = viewData.ToSelectList("Value", "Key",
                                                                         userViewModel.Value);
            return View("UserSummary", userViewModel);

在我的ASPX.CS页面上,我有以下内容:

的Page_Load

string viewType = null;
if(!String.IsNullOrEmpty(Request.QueryString["viewType"]))
        {
            viewType = Request.QueryString["viewType"];
        }


if(!IsPostBack)
        { if (viewType == "user")
                {
                    viewParams.Add("ViewName", "User Report");
                    var reportDataSource =
                        _userService.GetUsersReportData(beginDate, endDate, id);
                    reportViewer.Initialize("UserIndividual.rdlc",
                                            new List<ReportDataSource> {reportDataSource}, viewParams);
                }

我没有为所有元素添加所有初始化 - 不认为这种情况确实需要

由于

2 个答案:

答案 0 :(得分:2)

检查this odetocode.com article

要在手动刷新后保留所选值,您可以使用Cookie,例如jquery.cookie。您必须在更改时保存所选值,并在页面加载时检索该值。

答案 1 :(得分:0)

我实际上找到了一个非常简单的解决方案,我想我是在忽略它。我发现我传递日期值的方式与我可以传递所选视图类型的值的方式相同,它将保留在下拉框中,直到更改而不是在每次加载页面后更改。 单击按钮后,我在Get方法的CONTROLLER文件中添加了这些内容。

这是我的帖子:

[HttpPost]
    public ActionResult ResultSummary(ResultSummaryViewModel resultSummaryViewModel)
    {
        if (!ModelState.IsValid)
            return View("ResultSummary", resultSummaryViewModel);
        return RedirectToAction("ResultSummary",
                                new
                                    {
                                        beginDate = resultSummaryViewModel.BeginDate,
                                        endDate = resultSummaryViewModel.EndDate,
                                        value = resultSummaryViewModel.Value
                                    });
    }

这是我的获取:

[HttpGet]
    public ActionResult ResultSummary(DateTime? beginDate = null, DateTime? endDate = null, string value="")
    {
        var resultSummaryViewModel = new ResultSummaryViewModel();
        resultSummaryViewModel.BeginDate = beginDate;
        resultSummaryViewModel.EndDate = endDate;
        resultSummaryViewModel.Value = value;

.........

代码仍在继续,但这是主要部分。