2010-10-20 54 views
4

我們的應用程序的一些用戶將擁有對我們許多頁面的只讀訪問權限,在我們當前的Web表單應用程序中,這意味着他們看到了表單,但所有字段都被禁用。我們正在研究MVC 3,並尋找實現此功能的最乾淨,最習慣的方式。我可以使用MVC全局動作過濾器來禁用表單域嗎?

一些想法而已:

  1. 的全球行動過濾器和編輯模板的一些組合。
  2. 的自定義HTML幫手,像Html.SecureTextBox等...

我傾向於1號,但我想知道如果任何你們/更多的MVC經驗的女生已經解決了這個問題以更好的方式。

+0

你如何定義哪些字段被禁用?通過屬性,通過數據庫? – jfar 2010-10-20 19:40:54

+0

它目前有兩種工作方式,頁面基類循環瀏覽頁面上的所有控件並禁用它們,或者您可以在後面的代碼中覆蓋此行爲。頁面是否應該是隻讀是授權角色。 – Dave 2010-10-20 20:43:47

回答

1

我同意使用基本視圖模型,或者只是具有「CanEdit」屬性類型的接口。如果你使用接口路由,你可以在OnActionExecuted方法的ActionFilter中設置屬性。

要將它與視圖綁定,創建一個新的HtmlHelper將非常​​簡單。我會使用TextBoxFor作爲基類,因爲它可以訪問視圖的模型。然後,您可以檢查該屬性並創建必要的HTML屬性。但是,通過使用此路線,您需要爲您需要的每種類型的輸入控件(文本框,選擇列表等)創建一個新的幫助器。

不知道你在做什麼的所有細節,一個更簡單的想法是不提供只讀用戶的保存按鈕。保存按鈕將由視圖模型中的一個屬性(或ViewData,如果您喜歡)驅動。

其他幾個人提到,仍然需要服務器端限制來防止人們繞過客戶端限制。你需要一個動作過濾器。 This link對此有個好主意。

0

我更傾向於將設置一個變量在一個共同的基本視圖模型(或ViewData的),使用一個全球行動過濾,然後使用位的jquery的動態禁用輸入字段,刪除按鈕等

$(':input')。attr('readonly',true);

+0

用戶需要做的就是禁用javascript來編輯他們沒有權限編輯的字段? – jfar 2010-10-20 19:59:42

+0

好點,或許是相反的。繪製一切禁用,然後使用jQuery來啓用它。 – Clicktricity 2010-10-20 20:04:47

+0

禁用表單字段對用戶來說真的只是一個方便,後端代碼將阻止任何更改發生,如果他們不應該。 – Dave 2010-10-20 20:51:07

相關問題