2014-02-05 23 views
0

自我解釋的問題。如何以編程方式清除WebGrid的HasSelection屬性?

在帖子之間,我設置的網格保留了HasSelection位,即使WebGrid已被重新載入新數據。因此,即使用戶尚未選擇新結果集中的任何內容,我所連接的WebGrid記錄的物理選擇功能也會運行。

想法?

+0

你真的需要發佈一些代碼,HasSelection位在哪裏(數據或...)。你如何將數據綁定到網格等? – Peter

+0

無需任何代碼。我只是想讓WebGrid在重新填充一組新數據時自行重置。看起來這應該是該類型應該做的第一件事情之一,而不必做任何特別的事情。 – Boydski

回答

0

WebGrid通過查詢字符串獲取選定的行。默認情況下,查詢字符串場rowhttp://localhost/grid?row=2

理想情況下,你會如果這是不可能去除查詢字符串場回發,像這樣http://localhost/grid

之前,設置WebGrid.SelectedIndex-1代替。

編輯

這裏有一些方法來設置WebGrid.SelectedIndex

@{ 
    WebGrid grid = new WebGrid(Model); 
    grid.SelectedIndex = ViewBag.SelectedIndex; 
    @grid.GetHtml(
     columns: grid.Columns(
      ... 
     ) 
    ) 
} 

public ActionResult Index(int? row) 
{ 
    ViewBag.SelectedIndex = (IsKeepSelection() ? row.GetValueOrDefault() : 0) - 1; //TODO: add bound checking 
    return View(People.GetPeople()); 
} 

或(不過,我覺得更喜歡以前的一個,因爲它更容易理解):

@{ 
    WebGrid grid = new WebGrid(Model); 
    if(ViewBag.ClearSelection) { 
     grid.SelectedIndex = -1; 
    } 
    @grid.GetHtml(
     columns: grid.Columns(
      ... 
     ) 
    ) 
} 

public ActionResult Index(int? row) 
{ 
    ViewBag.ClearSelection = IsClearSelection(); 
    return View(People.GetPeople()); 
} 
+0

更新SelectedIndex會劫持實際用戶的選擇。因此,如果用戶選擇WebGrid行,則由於它通過索引重置被忽略,因此繞過它的行爲被繞過。試圖這樣做之後會引發異常,因爲WebGrid已經綁定。我一直在努力放棄查詢字符串。但是在服務器端代碼中沒有找到這樣做的交鑰匙方法。 – Boydski

+0

有一個簡單的方法可以不劫持實際用戶的選擇。查看我更新的代碼。 – LostInComputer

+0

好的。感謝細節。雖然這不是我最終找到的解決問題的答案,但我會給你,因爲修改SelectedIndex是一門藝術。 ;) – Boydski

0

最終這個問題的答案是清除表格上的「行動」。顯然,WebGrid與此值緊密結合,因此WebGrid的製作者希望您能夠使用action屬性而不是WebGrid本身。

我只需在我的提交按鈕中重置查詢字符串document.forms[0].action = window.location.pathname;。由於表單的動作解析爲查詢字符串,所以解決了這個問題。

相關問題