【问题标题】:Keeping selected item from dropdown box after page refresh页面刷新后从下拉框中保留所选项目
【发布时间】:2011-05-13 13:33:22
【问题描述】:

我有一个下拉框,其中包含供用户选择的时间列表。我的问题是,在用户选择他们的选择然后点击提交按钮后,页面被刷新,然后下拉框再次设置为默认值 - 即使在页面重新加载后,我怎样才能让用户的选择留在下拉框中?我不确定我的代码的哪一部分最需要我的 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 页面上,我有以下内容:

页面加载

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);
                }

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

谢谢

【问题讨论】:

  • 您是使用SelectListItem 来填充您的下拉菜单,还是您自己手动构建它?请提供代码示例以便更好地给您回复。
  • @Tejs - 是的,我正在使用 SelectListItem 并且我在上面添加了一些代码。谢谢!
  • 这几乎不像 ASP.NET MVC...在您看来,您是调用Html.DropDownList 还是自己编写代码?我想看看。
  • 您的意思是按 F5 刷新页面时重新加载页面吗?
  • @Dutch 是的 - 我的意思是刷新

标签: c# asp.net-mvc


【解决方案1】:

签出this odetocode.com article

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

【讨论】:

  • 我真的很喜欢这个例子,感谢 Dutch。但我没有使用 IEnumarable,所以我会看到一个接近的替代方案。再次感谢我相信我将来会提到这个。
  • IQueryable 是一个 IEnumerable,SelectList 是一个 IEnumerable,userViewModel.Users 也是一个 IEnumerable。
【解决方案2】:

我实际上找到了一个非常简单的解决方案,我想我忽略了它。我发现与传递日期值的方式相同,我可以传递所选视图类型的值,并且它将保留在下拉框中直到更改,而不是在每次页面加载后更改。 单击按钮后,我在 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;

…………

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

【讨论】:

    猜你喜欢
    • 2014-08-19
    • 2015-05-05
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2015-06-21
    相关资源
    最近更新 更多