2014-06-23 21 views
0

我已經使用ASP.NET MVC,當我有例如下拉列表 - 我必須檢查選定的值是否正確,因爲用戶可以使用例如Firebug更改下拉列表上的值。DropDownList/RadioButtonList - 我不需要驗證選定的值?

我是ASP.NET Web Forms中的新成員。我有例如:

<asp:DropDownList ID="DropDownList1" runat="server"> 
    <asp:ListItem Value="1">One</asp:ListItem> 
    <asp:ListItem Value="2">Two</asp:ListItem> 
</asp:DropDownList> 

<asp:RadioButtonList ID="RadioButtonList1" runat="server"> 
    <asp:ListItem Value="1" Selected="True">One</asp:ListItem> 
    <asp:ListItem Value="2">Two</asp:ListItem> 
</asp:RadioButtonList> 

我在螢火蟲選擇的值已經改變在DropDownList1 3和RadioButtonList1 3和提交表單。然後我有錯誤: 回發或回調參數無效。事件驗證在配置中啓用,或在頁面中啓用<%@ Page EnableEventValidation =「true」%>。爲了安全起見,此功能驗證回發或回調事件的參數來自最初呈現它們的服務器控件。如果數據是有效的和預期,使用ClientScriptManager.RegisterForEventValidation方法,以註冊VA回發或回調數據...

這是否意味着我不需要驗證,因爲用戶可以選擇的值不改變它?

+0

你是什麼意思用戶不能改變它?你剛剛做到了。只有當你知道你在做什麼時,它基本上只會告訴你將'EnableEventValidation'設置爲'false'。 – nphx

+0

所以我很安全,我不需要檢查選定的值是否在列表中? – michael

+0

閱讀@Tallmaris答案,我意識到你問你是否需要做服務器端驗證。檢查他的答案;)。 – nphx

回答

2

一般來說,是的,EnableEventValidation作品在考慮這個目的,你可以在這裏閱讀更多:http://msdn.microsoft.com/en-us/library/system.web.ui.page.enableeventvalidation(v=vs.110).aspx

特別是:

When the EnableEventValidation property is set to true, ASP.NET validates that a control event originated from the user interface that was rendered by that control. A control registers its events during rendering and then validates the events during postback or callback handling. For example, if a list control includes options numbered 1, 2, or 3 when the page is rendered, and if a postback request is received specifying option number 4, ASP.NET raises an exception. All event-driven controls in ASP.NET use this feature by default.

因此,作爲事實上你可以安全的認識人們無法使用控制檯調整您的客戶端HTML並回傳惡意數據。

這就是說,您可能希望在服務器代碼中加入一些警惕,以防萬一您需要禁用事件驗證的某些頁面(如果您想提交看起來像代碼的字符串或者如果您想修改例如用jQuery在頁面上的元素)。

+0

Wow thx - 在ASP.NET MVC中我沒有那個有趣的機制:) – michael