Discussion:
<組態>或<page>裡enableEventValidation問題
(时间太久无法回复)
JosephKo
2006-04-27 08:05:02 UTC
Permalink
我在GridView裡加入一Template Field並至該ItemTemplate裡

放一個ImageButton做為刪除欄位

在RowDataBound事件裡為此ImageButton加入onclick屬性

Protected Sub gvUserData_RowDataBound(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewRowEventArgs) Handles
gvUserData.RowDataBound
For index As Integer = 0 To gvUserData.Rows.Count - 1
Dim S As ImageButton =
CType(gvUserData.Rows(index).Cells(7).Controls(1), ImageButton)
S.Attributes.Add("onclick", "return confirm('確定刪除帳號:「" &
gvUserData.Rows(index).Cells(1).Text & "」?');")
Next
End Sub

執行時會有「確定刪除」的訊息對話,按「是」後出現錯誤畫面

錯誤內容如下:

無效的回傳或回呼引數。已在組態中使用<pages enableEventValidation="true"/> 或在網頁中使用<% Page
EnableEventValidation="true" %>
啟用事件驗證。基於安全性理由,這項功能驗證回傳或回呼引數是來自原本呈現它們的伺服器控制項。如果資料為有效並且是必需的,請使用ClientScriptManager.RegisterForEventValidation方法註冊回傳或回呼資料,以進行驗證。

以此錯誤內容,我在該.aspx檔裡加上<% Page EnableEventValidation="true" %>後來測試程式,不過一樣出現相同錯誤內容。

另外,我嘗試在.aspx檔裡加上<% Page EnableEventValidation="false"
%>後,測試程式,結果是按「是」就沒有任何動作(沒有達到刪除的結果)

這問題困擾了很久

請各位達人幫忙。謝謝..
ASP.NET MVP - §õ«¶¿«
2006-04-28 06:07:38 UTC
Permalink
Joseph, §ÚžÕµÛ§â±zªº case ­«œÆ°µ€FŽXŠž¡A³£šSŠ³¹Jšì¥ôŠó°ÝÃD¡CœT»{§R°£ªº¹ïžÜ®Ø³£¥¿±`ªº¥X²{¡Ažê®ÆŠC€]³£³Q¥¿±`ªº§R°£¡C

§Ú·Q¡A©Î³\¬O§Ú­ÌªºšBÆJ²€Š³®t²§¡C§Ú§â§ÚªºšBÆJŠCŠb€U­±¡A±z€£§«€ñ¹ï¬Ý¬Ý¡C

1. ©Ô¥X GridView¡AšÃ±Ò°Ê§R°£
2. ¶i€J¡uœs¿èžê®ÆŠæ¡v¶µ¥Ø¡A±N§R°£šº€@ÄæÂàŽ«Šš TemplateField
3. œs¿èŒËªO¡A§â¡u§R°£¡v³o­Ó LinkButton šúŠW¬° lbDelete
4. œs¿èµ{Š¡œX¡AŠb RowDataBound šÆ¥ó€€¥[€J¥H€Uµ{Š¡¡G

Dim lb as LinkButton = CType(e.Row.FindControl("lbDelete"), LinkButton)
'šä¹ê€£¥Î CType €]¥i¥H
If lb IsNot Nothing Then
lb.Attributes.Add("onClick", "return confirm('œT©w§R°£¶Ü¡H');")
End If

---------------
ŠbRowDataBoundšÆ¥óžÌ¬°Š¹ImageButton¥[€JonclickÄÝ©Ê
Protected Sub gvUserData_RowDataBound(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewRowEventArgs) Handles
gvUserData.RowDataBound
For index As Integer = 0 To gvUserData.Rows.Count - 1
Dim S As ImageButton =
CType(gvUserData.Rows(index).Cells(7).Controls(1), ImageButton)
S.Attributes.Add("onclick", "return confirm('œT©w§R°£±bž¹¡G¡u"
&
gvUserData.Rows(index).Cells(1).Text & "¡v¡H');")
Next
End Sub
°õŠæ®É·|Š³¡uœT©w§R°£¡vªº°T®§¹ïžÜ¡A«ö¡u¬O¡v«á¥X²{¿ù»~µe­±
¿ù»~€º®eŠp€U¡G
µL®ÄªºŠ^¶Ç©ÎŠ^©I€ÞŒÆ¡C€wŠb²ÕºA€€šÏ¥Î<pages enableEventValidation="true"/>
©ÎŠbºô­¶€€šÏ¥Î<% Page
EnableEventValidation="true" %>
±Ò¥ÎšÆ¥óÅçÃÒ¡C°ò©óŠw¥þ©Ê²z¥Ñ¡A³o¶µ¥\¯àÅçÃÒŠ^¶Ç©ÎŠ^©I€ÞŒÆ¬OšÓŠÛ­ì¥»§e²{¥Š­ÌªºŠøªAŸ¹±±šî¶µ¡CŠpªGžê®Æ¬°Š³®ÄšÃ¥B¬O¥²»Ýªº¡AœÐšÏ¥ÎClientScriptManager.RegisterForEventValidation€èªkµù¥UŠ^¶Ç©ÎŠ^©Ižê®Æ¡A¥H¶iŠæÅçÃÒ¡C
¥t¥~¡A§Ú¹ÁžÕŠb.aspxÀɞ̥[€W<% Page EnableEventValidation="false"
³o°ÝÃD§xÂZ€F«Ü€[
œÐŠUŠì¹F€HÀ°Š£¡CÁÂÁÂ..
JosephKo
2006-04-28 06:48:01 UTC
Permalink
MVP你好

你測試時沒有出現enableEventValidation的問題,乃因你TemplateField是以LinkButton 來呈現
我程式碼是以ImageButton來呈現刪除鈕...

For index As Integer = 0 To gvUserData.Rows.Count - 1
Dim S As ImageButton =
CType(gvUserData.Rows(index).Cells(7).Controls(1), ImageButton)
S.Attributes.Add("onclick", "return confirm('確定刪除帳號:「" &
gvUserData.Rows(index).Cells(1).Text & "」?');")
Next

我之前也是使用LinkButton的方式~~沒有任何問題。現問題就出在用ImageButton情況下會有錯誤

麻煩MVP再次幫我~~~拜託拜託...謝謝


"ASP.NET MVP - ???" 來函:
Joseph, 我試著把您的 case 重複做了幾次,都沒有遇到任何問題。確認刪除的對話框都正常的出現,資料列也都被正常的刪除。
我想,或許是我們的步驟略有差異。我把我的步驟列在下面,您不妨比對看看。
1. 拉出 GridView,並啟動刪除
2. 進入「編輯資料行」項目,將刪除那一欄轉換成 TemplateField
3. 編輯樣板,把「刪除」這個 LinkButton 取名為 lbDelete
4. 編輯程式碼,在 RowDataBound 事件中加入以下程式:
Dim lb as LinkButton = CType(e.Row.FindControl("lbDelete"), LinkButton)
'其實不用 CType 也可以
If lb IsNot Nothing Then
lb.Attributes.Add("onClick", "return confirm('確定刪除嗎?');")
End If
---------------
世事無絕對
Post by JosephKo
我在GridView裡加入一Template Field並至該ItemTemplate裡
放一個ImageButton做為刪除欄位
在RowDataBound事件裡為此ImageButton加入onclick屬性
Protected Sub gvUserData_RowDataBound(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewRowEventArgs) Handles
gvUserData.RowDataBound
For index As Integer = 0 To gvUserData.Rows.Count - 1
Dim S As ImageButton =
CType(gvUserData.Rows(index).Cells(7).Controls(1), ImageButton)
S.Attributes.Add("onclick", "return confirm('確定刪除帳號:「" &
gvUserData.Rows(index).Cells(1).Text & "」?');")
Next
End Sub
執行時會有「確定刪除」的訊息對話,按「是」後出現錯誤畫面
錯誤內容如下:
無效的回傳或回呼引數。已在組態中使用<pages enableEventValidation="true"/>
或在網頁中使用<% Page
EnableEventValidation="true" %>
啟用事件驗證。基於安全性理由,這項功能驗證回傳或回呼引數是來自原本呈現它們的伺服器控制項。如果資料為有效並且是必需的,請使用ClientScriptManager.RegisterForEventValidation方法註冊回傳或回呼資料,以進行驗證。
以此錯誤內容,我在該.aspx檔裡加上<% Page EnableEventValidation="true" %>後來測試程式,不過一樣出現相同錯誤內容。
另外,我嘗試在.aspx檔裡加上<% Page EnableEventValidation="false"
%>後,測試程式,結果是按「是」就沒有任何動作(沒有達到刪除的結果)
這問題困擾了很久
請各位達人幫忙。謝謝..
JosephKo
2006-05-04 03:53:01 UTC
Permalink
麻煩請各位達人幫忙。謝謝..
JosephKo
2006-05-04 03:54:02 UTC
Permalink
麻煩請各位達人幫忙。謝謝..

Loading...