2011-05-13 83 views
0

我有一个下拉框,其中包含用户可供选择的时间列表。我的问题是,在用户选择他们的选择,然后点击提交按钮,页面刷新,然后下拉框设置为默认 - 我怎么能让用户选择留在下拉框,即使在页面重新加载?我不知道我的代码中哪部分是最需要的,我的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); 
       } 

我没加所有的初始化所有元素 - 没想到它真的需要针对这种情况

感谢

+1

您是使用'SelectListItem'来填充下拉菜单,还是自己手动构建?请提供代码示例以更好地给您回复。 – Tejs 2011-05-13 13:36:25

+0

@Tejs - 是的,我正在使用SelectListItem,并在上面添加了一些代码。谢谢! – Masriyah 2011-05-13 13:49:13

+0

这几乎看起来不像ASP.NET MVC ...在你看来,你是在调用'Html.DropDownList'还是你自己的代码?我想看看。 – Tejs 2011-05-13 13:51:47

回答

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; 

.........

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

2

检查this odetocode.com article出来。

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

+0

我非常喜欢这个例子,谢谢荷兰人。但我不使用IEnumarable,所以我会看到一个接近的替代品。再次感谢我确信我将来会提及这一点。 – Masriyah 2011-05-13 13:52:38

+0

IQueryable是一个IEnumerable,SelectList是一个IEnumerable,userViewModel.Users也是一个IEnumerable's。 – 2011-05-13 14:18:37

相关问题