自我解釋的問題。如何以編程方式清除WebGrid的HasSelection屬性?
在帖子之間,我設置的網格保留了HasSelection位,即使WebGrid已被重新載入新數據。因此,即使用戶尚未選擇新結果集中的任何內容,我所連接的WebGrid記錄的物理選擇功能也會運行。
想法?
自我解釋的問題。如何以編程方式清除WebGrid的HasSelection屬性?
在帖子之間,我設置的網格保留了HasSelection位,即使WebGrid已被重新載入新數據。因此,即使用戶尚未選擇新結果集中的任何內容,我所連接的WebGrid記錄的物理選擇功能也會運行。
想法?
WebGrid通過查詢字符串獲取選定的行。默認情況下,查詢字符串場row
像http://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());
}
更新SelectedIndex會劫持實際用戶的選擇。因此,如果用戶選擇WebGrid行,則由於它通過索引重置被忽略,因此繞過它的行爲被繞過。試圖這樣做之後會引發異常,因爲WebGrid已經綁定。我一直在努力放棄查詢字符串。但是在服務器端代碼中沒有找到這樣做的交鑰匙方法。 – Boydski
有一個簡單的方法可以不劫持實際用戶的選擇。查看我更新的代碼。 – LostInComputer
好的。感謝細節。雖然這不是我最終找到的解決問題的答案,但我會給你,因爲修改SelectedIndex是一門藝術。 ;) – Boydski
最終這個問題的答案是清除表格上的「行動」。顯然,WebGrid與此值緊密結合,因此WebGrid的製作者希望您能夠使用action屬性而不是WebGrid本身。
我只需在我的提交按鈕中重置查詢字符串document.forms[0].action = window.location.pathname;
。由於表單的動作解析爲查詢字符串,所以解決了這個問題。
你真的需要發佈一些代碼,HasSelection位在哪裏(數據或...)。你如何將數據綁定到網格等? – Peter
無需任何代碼。我只是想讓WebGrid在重新填充一組新數據時自行重置。看起來這應該是該類型應該做的第一件事情之一,而不必做任何特別的事情。 – Boydski