2011-08-04 9 views
1

如果我在客戶端項目添加到選擇元素,然後提交表單,我得到以下錯誤: -如何在服務器端註冊客戶端添加的數據以進行回發驗證?

Invalid postback or callback argument. Event validation is enabled using in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

我不想禁用EventValidation。我如何將在客戶端添加的數據註冊到特定的元素以在服務器端進行回發驗證?

我知道RegisterForEventValidation方法在那裏,但我從來沒有使用它,甚至我不明白從msdn。

如果有人曾經這樣做過,請簡單介紹一下示例代碼嗎?

回答

0

在我的情況,我知道所有事先可以被添加到在客戶端列表框的值,所以幸運的是,有一個解決方案: -

protected override void Render(HtmlTextWriter writer) 
{ 
Page.ClientScript.RegisterForEventValidation(lstBox.UniqueID, "ListItemValue 
that can be added at client side"); 
base.Render(writer); 
} 
1

說實話,我從來沒有過這個好運氣,我發現爲了避免ASP.NET嘗試驗證它,在這種特殊情況下子類化必要的控制就容易多了。這比翻頁驗證更好,因爲除了那個控件之外的所有東西都會一如既往地被驗證。我假設你在使用服務器端的HtmlSelect(同樣可以使用DropDownList)。這裏有一個選項:

public class NoEventValdationHtmlSelect : HtmlSelect 
{ 
} 

你必須通過檢索的Request.Form [UniqueNameOfControl]自的SelectedIndex /價值/項目將在服務器端空選定的值。

+0

+1爲您回覆。但是我發現我的問題的答案是它不是完全可能的,但是如果我知道將要在客戶端預先添加的值,那麼我可以將這些值註冊爲該控件的有效後數據,使用* * Page.ClientScript.RegisterForEventValidation **。謝謝! – teenup

相關問題