2014-10-09 15 views
0

在ASP.NET MVC 4,我有一個多頁的應用程序,做一些安全的第一頁上查看,存儲在會話變量的結果,然後使用OnActionExecuting在每個控制器上測試Session變量,因爲我在頁面之間移動。其中一個視圖使用帶有可排序列的WebGrid。當我點擊列標題進行排序時,我調用了視圖的默認Action,但是在OnActionExecuting中,Session變量不存在。它似乎創造了一個新的會議。然後我的邏輯將其視爲安全失敗。使用的WebGrid與排序的列,呼叫控制器繞過會議

我還沒有找到這個點擊(排序)在哪裏被處理,所以這是我的第一個問題 - 也許我可以影響正在傳遞的內容。或者,(理想情況下),WebGrid中有一個設置,我錯過了將維持目前的會議。我目前遠離代碼,但那些是我還沒有找到的東西。

我所尋找的是在使用的WebGrid排序的列功能來保存會話的方式。

附加信息:在視圖中,的WebGrid的<th>元素都爲錨,像<a href="/MyController?sort=MyColumnName?sortdir=ASC">

+0

在你的ActionMethod中,你能夠在方法的上方寫入[[Authorize]]嗎?檢查用戶是否已登錄。這可能是您的選項嗎? – 2014-10-09 12:15:48

+1

如果我無法獲得解決方案,我可以查看此內容。這將是一個重新設計,我的解決方案在除WebGrid以外的所有方面都確實可行。 – 2014-10-09 13:37:22

回答

0

(我可以用一個更好的答案,但是這個工作對我來說)

因爲標題中值實際上是一個錨點,我能夠發現QUERY_STRING總是包含「sort =」。因此,我至少可以檢查這一點,並根據假設,如果我得到這個查詢字符串,用戶已經通過了安全測試之前,將缺失的安全變量恢復到會話。

(filterContext.RequestContext.HttpContext.Request.Params["QUERY_STRING"].Contains("sort="))

我還在想,應該的WebGrid不是爲我來開始一個新的會話,但至少這個變通辦法將讓我去。

未來的參考注意事項:我們使用<system.web>設置<sessionState cookieless="true">。顯然,當WebGrid設置鏈接進行排序時,它不會檢測到該設置,因此它不包含URL中的會話標識。這就是爲什麼WebGrid爲我們開始新的會議。