2011-05-13 82 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

相關問題