2010-06-03 15 views
7

ठीक है, तो मैं एक gridview कि सिर्फ एक सरल बटन होता है में एक टेम्पलेट क्षेत्र मिल गया है ...TemplateField बटन के कारण GridView अमान्य पोस्टबैक

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Administration.aspx.cs"  
Inherits="Administration" %> 
<%@ Register TagPrefix="ajaxToolkit" Namespace="AjaxControlToolkit" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server">  
    <title>Keywords Administration</title> 
</head> 
<body class="popupbody"> 
<form id="form1" runat="server"> 
    <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePartialRendering="true" CombineScripts="false"></ajaxToolkit:ToolkitScriptManager> 

    <asp:Label ID="AddLabel" runat="server">Add a Keyword</asp:Label> 
    <br /> 
    <asp:TextBox ID="AddTextBox" runat="server" /> 
    <asp:Button ID="AddButton" Text="Add" runat="server" OnClick="AddKeyword_Click" /> 

    <asp:GridView ID="KeywordsGridView" AllowPaging="false" AutoGenerateColumns="false" BackColor="white" 
     GridLines="None" HeaderStyle-CssClass="Table_Header" RowStyle-CssClass="Table_Style" 
     OnRowDataBound="RowBound" runat="server"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Button runat="server" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField DataField="References" SortExpression="References" HeaderText="Total References" /> 
      <asp:BoundField DataField="Keyword" SortExpression="Keyword" HeaderText="Keyword" /> 
     </Columns> 
    </asp:GridView> 
</form> 
</body> 
</html> 

जब भी मैं बटन मैं त्रुटि मिलती है पर क्लिक करें ...

Invalid postback or callback argument. Event validation is enabled using 
<pages enableEventValidation="true"/> 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. 

मैं इतने पर एक जोड़े सहित इस मुद्दे, संदर्भित, उदाहरण के लिए लेख की एक सभ्य राशि मिल गया है ...

Invalid postback or callback argument. Event validation is enabled using '<pages enableEventValidation="true"/>'

और ...

Invalid postback or callback argument

मैं सिर्फ गलतफहमी हो सकता है, लेकिन जहाँ तक मैं बता सकता है वे वास्तव में मेरी मदद नहीं करते। EnableEventValidation = "false" को सेट किए बिना मैं इसे कैसे दूर कर सकता हूं?

संपादित मेरे पृष्ठ के लिए सभी कोड प्रकाशित किया गया था।

उत्तर

6

This fellow एक ऐसी ही समस्या (लगभग 4 टिप्पणी के लिए नीचे स्क्रॉल) है, जो GridView बटन के लिए विशिष्ट आईडी के स्थापित करने के लिए था के लिए एक समाधान मिल गया।

+0

मैंने पहले कुछ ऐसा करने की कोशिश की, लेकिन कोई भाग्य नहीं। – Carter

+0

आह हे! यही था वह। मैंने कुछ बेवकूफ किया और आईडी सेट करने वाले कोड को हमेशा नहीं चल रहा था। धन्यवाद श्रीमान! – Carter

0

आपको अपना बटन एक आईडी देना होगा। बस एक रनैट = "सर्वर" सर्वर नियंत्रण के लिए प्रदान की जाने वाली न्यूनतम जानकारी को पूरा नहीं करता है।

+0

मेरे पास एक बिंदु पर एक बटन आईडी थी। हालांकि, इससे कोई फर्क नहीं पड़ता कि यह उनका है या नहीं। मेरा बटन इतना अस्पष्ट कारण है क्योंकि मैं जितनी ज्यादा हो सके समस्या को सरल बनाने की कोशिश कर रहा था। – Carter

+0

क्या आप अपना कोड पूरे पृष्ठ के लिए और मास्टर पेज के लिए पोस्ट कर सकते हैं यदि आप एक का उपयोग कर रहे हैं? – TheGeekYouNeed

+0

कार्य किया जाता है। पोस्ट करने के लिए कोई मास्टर पेज नहीं। कोड पोस्ट करने के लिए – Carter

9

मुझे पता है कि यह पोस्ट पुराना है, लेकिन मुझे हाल ही में यह समस्या भी थी। की जाँच के बाद कैसे कोड एएसपी के लिए बनाया गया: बटन है कि मैं एक ItemTemplate में जोड़ लिया है मैं काफी एक बड़ा अंतर की खोज की:

एएसपी: ButtonField: ButtonField और भी एएसपी के लिए इनपुट प्रकार = "बटन" onclick = "जावास्क्रिप्ट: __ doPostBack ('ctl00 $ ctl00 $ cphMain $ cphContent $ gvEmails', 'SendFromBatch $ 0')" मूल्य = "जारी रखें">

एएसपी: बटन: इनपुट आईडी = "ctl00_ctl00_cphMain_cphContent_gvEmails_ctl02_btnCont" प्रकार = "सबमिट करें" ऑनक्लिक = "फ्रीजस्क्रीन ('ईमेल भेजे जा रहे हैं ...');" मान = "जारी रखें" नाम = "ctl00 $ ctl00 $ cphMain $ cphContent $ gvEmails $ ctl02 $ btnCont">

प्रकार समस्या थी! इसलिए, मैंने उपयोग सबमिट करने के बाद "सबमिट" से "गलत" में उपयोग सबमिट करें मुझे त्रुटि नहीं मिली।

संपादित करें: मैं हाल ही में सामान्य बीटीएन से imgBtns में बदलना चाहता था ताकि मैं कुछ जगह बचा सकूं और ग्रिडव्यू नाइसर भी बना सकूं: डी। बेशक मुझे एक ही समस्या आ रही थी और imagebtn में UseSubmitBehavior प्रॉपर्टी नहीं है, इसलिए मैंने समाधान की देखभाल शुरू कर दी।

निम्नलिखित पाया गया (नीचे दिया गया कोड UserControl में है)। !

1) IsPostBack

2) में बाइंड प्रस्तुत

में usercontrol ही रजिस्टर और सब कुछ योजना के बस के रूप में काम करता है - कोई सत्यापन त्रुटियों।

protected void Page_Load(object sender, EventArgs e) 
    { 
     OnLoadingEvent(new EventArgs()); 

     if (!Page.IsPostBack) 
     { 
      gvEmails.DataSource = odsEmails; 
      try 
      { 
       gvEmails.DataBind(); 
      } 
      catch (Exception) 
      { 
      } 
     } 

     if (!writeText) divWriteEmail.Visible = false; 
    } 

    protected override void Render(HtmlTextWriter writer) 
    { 
     Page.ClientScript.RegisterForEventValidation(this.UniqueID); 

     base.Render(writer); 
    } 

संपादित करें: मैं ऊपर कोड के साथ चारों ओर खेल रहा था और पूछा अपने आप को, क्या हुआ अगर आप वास्तव में अपने ObjectDataSource rebing करने की जरूरत है - फिर क्या होता है? वैसे ऊपर उपरोक्त कोड काम नहीं करेगा यदि आप पेज लोड में पुन: जुड़ते हैं, क्योंकि जब आप ग्रिडव्यू की पंक्ति में बीटीएन पर क्लिक करते हैं तो ग्रिडव्यू फिर से रिबाउंड हो जाएगा और इसे सर्वर पर जेनरेट होने के रूप में पहचाना नहीं जाएगा। मेला और वर्ग, लेकिन इस व्यवहार से कैसे बचें? खैर ... मैंने एक रास्ता निकाला, शायद सबसे अच्छा नहीं, लेकिन यह चाल है।

दरअसल, जब आप जीवी की पंक्ति पर बीटीएन पर क्लिक करते हैं तो आप ग्रिडव्यू को पुनर्विचार नहीं करना चाहते हैं ... लेकिन हम कैसे जानते हैं कि पेज लोड विधि को पहले कहा जाता है? खैर, वास्तव में मैं ग्रिडव्यू को पुनर्विचार नहीं करना चाहता हूं यदि ऑब्जेक्ट डेटा स्रोत का चयन param नहीं बदलता है। इसलिए, मैं सत्र दृश्य में ऑब्जेक्टडेटा स्रोत का चयन पैरा रखता हूं और जब मैं उनमें से एक बदलता हूं तो मैं केवल अपने ग्रिडव्यू को पुनर्निर्मित करता हूं - यह व्यवहार केवल पृष्ठ लोड ईवेंट के दौरान होता है। नवीनतम पंक्तियों को देखने के लिए मैं रीफ्रेश पर क्लिक करता हूं और बिना किसी समस्या के नवीनतम पंक्तियां प्राप्त करता हूं और फिलहाल मैं एक gvRow btn पर क्लिक करता हूं, त्रुटि गायब हो जाती है।

हो यह सब आप के लिए

  1. सीधे, वस्तु डेटा स्रोत
  2. पकड़ने डेटास्रोत से OnSelecting घटना के .Select() फोन को बचाने का चयन परम ई निर्धारित किया है बनाने के लिए। रद्द = सच
  3. जांच करें कि चयन परम अलग हैं और फिर gridview और इस बार बाँध जब OnSelecting आप e.Cancel = क्रम डीबी से डेटा पुनः प्राप्त करने में झूठी सेट करने के लिए पकड़ने - केवल एक बार।

उम्मीद है कि इससे मदद मिलती है!

+0

मेरी समस्या भी तय की गई, बहुत धन्यवाद! – bgs264

+0

महान, सरल समाधान, धन्यवाद Ioana! 'आईडी =" xxx "runat =" server "UseSubmitBehavior =" false "' – wotney

2

मुझे आज भी इसी तरह की त्रुटि थी लेकिन एक अलग समाधान के साथ। मैंने कई वर्षों से ग्रिडव्यू के साथ काम किया है और कभी भी यह मुद्दा नहीं था इसलिए मुझे लगा कि यह कुछ बेवकूफ होना चाहिए। बाहर निकलता है मैं अपना कोड डालना भूल गया था जो ग्रिडव्यू को if(!Page.IsPostBack) ब्लॉक में लोड करता है जिसके कारण मैंने इसे क्लिक करने के बाद बटन को फिर से बनाया, जिससे त्रुटि उत्पन्न हुई। कहा ब्लॉक में लोडिंग कोड रखने से इस मुद्दे को समाप्त कर दिया गया।

संबंधित मुद्दे