如果用戶點擊鏈接,他們會將將帶走。它們可能會被髮送回同一頁面,但頁面將會卸載,再次從服務器請求,然後在瀏覽器中重新呈現。如果您不希望發生這種情況,您不會首先向用戶提供鏈接。換句話說,有條件地渲染鏈接或不基於用戶的角色或其他。
@if (userCanEdit)
{
@Html.ActionLink(...)
}
哪裏userCanEdit
是任何你需要的邏輯來作出這樣的決定。
如果用戶無法確定您所做的任何檢查,那麼他們不會獲得鏈接。簡單。
但是,由於世界上有惡意的人,所以不能完全放在那裏。用戶有可能找出編輯某些內容並手動進入的鏈接。因此,爲防止您在行動檢查的編輯權限(比如您已經在代碼樣本中有),但如果用戶是不允許的,那麼你只返回被禁止的狀態代碼:
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
或
return new HttpStatusCodeResult(403);
它們都做同樣的事情。
UPDATE
基於以上的評論,看來用戶通常允許編輯,但不能在一個特定的實例,因爲另一個用戶編輯。 403 Forbidden在這種情況下並不合適,所以你真正擁有的只是一個簡單的重定向回到他們所在的頁面,或許用一條消息來解釋他們爲什麼回到那裏。
TempData["EditErrorMessage"] = "Sorry another user is editing that right now.";
return RedirectToAction("Index");
爲什麼他們點擊的按鈕可能無法編輯? – Shoe
偉大的問題@Shoe。這是爲了支持沒有某種主動刷新的記錄鎖定。用戶將顯示他們正在嘗試編輯的內容目前被另一個用戶鎖定,但是如果由於鏈接已被渲染而導致狀態已更改(即已解鎖),我們希望在點擊鏈接時將其帶到編輯屏幕。 – Chris
我認爲一個更好的方法是使用Ajax,如果成功,它會從JavaScript重定向,否則什麼也不做。這樣,如果出現故障,頁面狀態的所有信息都保持不變 – Shoe