2016-08-23 102 views
0

我有一個ASP.Net Application與簡單WebForms。有一些頁面用於插入和更新數據庫中的記錄。如何防止輸入值在表單中提交?

但是,在某些情況下,某些輸入控制值不應更新。所以,我已經設置了disabled屬性來防止用戶更新值。但是,用戶也可以從開發人員工具中啓用它並直接更改值。

如果我刪除使用javascript那麼該控件的值不會在表單提交的元素name屬性,它不會在服務器端(它完美)影響。但是,如果用戶在name屬性中重新指定了相同的值(,即'ctl00$ContentPlaceHolder2$txtBranchCode'),則輸入框的值將再次提交(這應該不會發生)

代碼:

<td align="left"> 
    <input name="ctl00$ContentPlaceHolder2$txtBranchCode" type="text" value="HO" 
     id="ctl00_ContentPlaceHolder2_txtBranchCode"> 
</td> 

現在,我想的是,如果我可以防止形式那麼我的問題就可以迎刃而解要提交的元素值。我無法在每個頁面添加條件「如果控件被禁用,則不應更新。」有很多頁面,我必須在每一頁都做同樣的工作。如果有共同的解決方案,那麼它會更好。

+0

唯一安全可靠的方法是在服務器上執行此操作。你需要檢查是否應該使用該值,如果不是,則忽略它。您已經說過,客戶上做的任何事情都可以改變。 – webnoob

+0

是@webnoob我知道服務器端驗證更好,但我無法修改所有頁面,它太多了。所以,我試圖找到一個通用的解決方案。如果我可以從asp窗體註銷控件,Asp Form不會發布該控件的值。 – Shell

+0

不僅更好 - 唯一安全的方式。如果您現在面臨着這個架構的問題,您將來可能會再次面對這個問題。爲什麼在許多地方必須採用相同的邏輯?你能否將某些功能壓縮到可以爲你做這個驗證的基類/服務?我理解這可能意味着需要做很多工作,但這取決於這是多少要求。 – webnoob

回答

0

您不能相信客戶端代碼來控制數據庫中的更新。 你應該做的是編寫一些服務器端代碼來完成這項工作。客戶端代碼可以很容易地由客戶端操縱,你不能相信它。

0

如果不應更新輸入控制值,請勿通過設置Visible="false"來呈現控件。

服務器端驗證更安全,而客戶端驗證提供了更好的用戶體驗,因此存在折衷。理想情況下,兩者都應該到位,客戶端驗證的用戶體驗更好,並通過服務器端驗證來保護服務器資源和數據庫。

+0

我無法使控件不可見。用戶可以看到控制的值,但不應該允許編輯它。我的應用程序中有很多頁面因此,如果每個頁面都啓用了控件,則無法將條件更新。 – Shell