अमान्य पोस्टबैक या कॉलबैक तर्क। ईवेंट सत्यापन '<पेज enableEventValidation = "true" />' का उपयोग करके सक्षम किया गया है


238

क्लाइंट-साइड से एक पृष्ठ वापस पोस्ट करने पर मुझे निम्न त्रुटि मिल रही है। मेरे पास जावास्क्रिप्ट कोड है जो एक एस्प: सूची बॉक्स को ग्राहक की ओर से संशोधित करता है।

हम इसे कैसे ठीक करते हैं?

नीचे त्रुटि विवरण:

Server Error in '/XXX' Application.

--------------------------------------------------------------------------------
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.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: 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.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[ArgumentException: 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.]
   System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +2132728
   System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
   System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +274
   System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
   System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +353
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1194

--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433

पेज_लोड घटना में डेटाबाइंड न करें।
पॉल ज़हरा

जवाबों:


171

समस्या यह है कि ASP.NET को इस अतिरिक्त या हटाए गए सूची के बारे में नहीं पता है। आपको कई विकल्प मिले (नीचे सूचीबद्ध):

  • ईवेंट अक्षम करना (बुरा विचार, क्योंकि आप बहुत कम लागत के साथ आने वाली सुरक्षा को कम कर देते हैं)।
  • ASP.NET Ajax UpdatePanel का उपयोग करें। (अपडेटबॉक्स में लिस्टबॉक्स रखें और यदि आप लिस्टबॉक्स को जोड़ते या हटाते हैं, तो एक अपडेट को ट्रिगर करें। इस तरह से देखने और संबंधित क्षेत्रों को अपडेट मिलता है और ईवेंटवेलिडेशन पास हो जाएगा।)
  • क्लाइंट-साइड को भूल जाओ और क्लासिक पोस्टबैक का उपयोग करें और सूची सर्वर-साइड को जोड़ें या निकालें।

आशा है कि ये आपकी मदद करेगा।


एक और विकल्प: IPostBackEventHandler को लागू करें और js __doPostBack ('<% = UniqueId.ToString ()%>', arg)
gdbdable

उपरोक्त सुझावों के आधार पर, मैंने अपने ड्रॉपडाउन को एक नियमित ASP.NET asp में डाला: UpdatePanel, ड्रॉपडाउन को कोड के पीछे लोड किया और फिर upNewRecord.Update ();
रिकार्डो एपलटन

183

क्या आपके पास Page_Load घटनाओं में कोड हैं? यदि हाँ, तो शायद निम्नलिखित को जोड़ने से मदद मिलेगी।

if (!Page.IsPostBack)
{ //do something }

जब आप अपने आदेश पर क्लिक करते हैं तो यह त्रुटि होती है और Page_load को फिर से चलाया जा रहा है, एक सामान्य जीवन चक्र में Page_Load होगा -> कमांड पर क्लिक करें -> Page_Load (फिर से) -> प्रक्रिया ItemCommand घटना


7
अहा! बहुत बहुत धन्यवाद, यह मेरे मामले में चाल थी! मैंने पगेलोड में एक ड्रॉपडेलिस्ट को पुनः लोड किया, और इसलिए रूपरेखा ने डीडीएल में वस्तुओं (नए वाले) का नियंत्रण खो दिया, और जिस पर मैंने क्लिक किया (जो अब मौजूद नहीं था)
मिशेल

मुझे ओपी के रूप में एक ही त्रुटि थी ... मैं अपने फॉर्म में एक विज़ार्ड का उपयोग कर रहा था और मैं अपने पेज लोड में 0 कदम बुला रहा था। हटा दिया गया और समस्या गायब हो गई। धन्यवाद ...
tking

इस उत्तर के लिए बहुत बहुत धन्यवाद .... एक ही समस्या थी और यह पता चला कि मैं अपने ग्रिड में डेटा लोड करने के दौरान पोस्टबैक को अनदेखा करना भूल गया था ... मुझे बहुत समय बचाएं
क्गामेयर

10
ओह! MVC से वेबफॉर्म पर वापस आना एक दर्द है। यह सही उत्तर है
विष्णु रथ

2
मैंने ऐसा किया था, लेकिन यह मेरे लिए काम नहीं करता था क्योंकि कोड है मुझे पेज_लोड इवेंट में चलना है जब यह पोस्टबैक नहीं है, और इसलिए मुझे अभी भी वही त्रुटि मिली है। मेरे पुनरावर्तक के लिए व्यूस्टेट को अक्षम करने के बजाय समस्या हल हो गई।
ब्रायन

40

मुझे डेटाग्रिड के साथ एक अनुभव था। इसका एक कॉलम "सेलेक्ट" बटन था। जब मैं किसी भी पंक्ति का "चयन करें" बटन क्लिक कर रहा था तो मुझे यह त्रुटि संदेश मिला:

"अमान्य पोस्टबैक या कॉलबैक तर्क। किसी पृष्ठ में कॉन्फ़िगरेशन या <% @ पेज EnableEventValidation =" true "%> का उपयोग करके इवेंट सत्यापन सक्षम किया गया है। सुरक्षा उद्देश्यों के लिए, यह सुविधा सत्यापित करती है कि सर्वर नियंत्रण से उत्पन्न होने वाली कॉलबैक पोस्टबैक या कॉलबैक के लिए तर्क। मूल रूप से उन्हें प्रदान किया गया। यदि डेटा वैध और अपेक्षित है, तो सत्यापन के लिए पोस्टबैक या कॉलबैक डेटा को पंजीकृत करने के लिए ClientScriptManager.RegisterForEventValidation विधि का उपयोग करें। "

मैंने कई कोड बदले, और आखिरकार मैं सफल हुआ। मेरा अनुभव मार्ग:

1) मैंने पृष्ठ विशेषता को बदल दिया है EnableEventValidation="false"लेकिन यह काम नहीं किया। (न केवल सुरक्षा कारणों से यह खतरनाक है, मेरे ईवेंट हैंडलर को नहीं बुलाया गया:void Grid_SelectedIndexChanged(object sender, EventArgs e)

2) मैंने ClientScript.RegisterForEventValidationरेंडर विधि में लागू किया। लेकिन यह काम नहीं किया।

protected override void Render(HtmlTextWriter writer)
{
    foreach (DataGridItem item in this.Grid.Items)
    {
        Page.ClientScript.RegisterForEventValidation(item.UniqueID);
        foreach (TableCell cell in (item as TableRow).Cells)
        {
            Page.ClientScript.RegisterForEventValidation(cell.UniqueID);
            foreach (System.Web.UI.Control control in cell.Controls)
            {
                if (control is Button)
                    Page.ClientScript.RegisterForEventValidation(control.UniqueID);
            }
        }
    }
}

3) मैंने अपने बटन प्रकार को ग्रिड कॉलम में से बदल दिया PushButtonहै LinkButtonइसने काम कर दिया! ("ButtonType =" LinkButton ")। मुझे लगता है कि यदि आप अन्य मामलों में" LinkButton "जैसे अन्य नियंत्रणों के लिए अपने बटन को बदल सकते हैं, तो यह ठीक से काम करेगा।


1
मेरा समाधान डेटाग्रिड के भीतर नेस्टिंग बटन पर छोड़ देना था। एमएस मुझे फिर से विफल रहता है।
याकूब डेटा सॉल्यूशंस

आपका हल मेरे लिए भी काम है। धन्यवाद। लेकिन मैं जानना चाहता हूं कि Buttonजब linkButtonएक ही कार्यक्रम में काम किया जा रहा है तो काम क्यों नहीं कर रहा है। यदि हां, तो क्या हमें हमेशा उपयोग करने की आवश्यकता है linkButton? हम और अधिक लचीले कैसे बना सकते हैं?
फ्रैंक मायट थू

8
अपने बटन को जोड़ने का प्रयास करें UseSubmitBehavior = "False" stackoverflow.com/questions/2968525/…
JJschk

Awesomeeeeeee :) .. आप इसे केवल अनुभव से सीख सकते हैं .. आपने असली scenerio tat से साबित किया कि अनुभव सबसे अच्छा शिक्षक है .. बहुत अच्छा और स्पष्टीकरण!
saun4frsh

रेंडर यू मस्ट पुट बेस के लिए ओवरराइड में। रेंडर (लेखक); अंत में ... अन्यथा यह काम नहीं करेगा!
पॉल ज़हरा

28

आप वास्तव में 2 या 3 करना चाहते हैं, घटना सत्यापन को अक्षम न करें।

किसी एस्प में आइटम जोड़ने के साथ दो मुख्य समस्याएं हैं: लिस्टबॉक्स क्लाइंट साइड।

  • पहला यह है कि यह घटना सत्यापन के साथ हस्तक्षेप करता है। सर्वर पर वापस आया क्या यह नीचे भेजा नहीं है।

  • दूसरा यह है कि अगर आप ईवेंट सत्यापन को अक्षम कर देते हैं, तब भी जब आपका पृष्ठ वापस लिस्टबॉक्स में आइटम पोस्ट करता है, तो व्यूस्टेट से पुनर्निर्माण किया जाएगा, इसलिए क्लाइंट पर आपके द्वारा किए गए कोई भी परिवर्तन खो जाते हैं। इसका कारण यह है कि एक asp.net क्लाइंट पर संशोधित एक सूची बॉक्स की सामग्री की अपेक्षा नहीं करता है, यह केवल एक चयन किए जाने की उम्मीद करता है, इसलिए यह आपके द्वारा किए गए किसी भी बदलाव का खुलासा करता है।

सबसे अच्छा विकल्प एक अद्यतन पैनल का उपयोग करने की सबसे अधिक संभावना है जैसा कि सिफारिश की गई है। एक अन्य विकल्प, अगर आपको वास्तव में इस ग्राहक पक्ष को करने की आवश्यकता है, तो एक के <select>बजाय एक सादे पुराने का उपयोग करना है <asp:ListBox>, और अपनी वस्तुओं की सूची को एक छिपे हुए क्षेत्र में रखना है। जब पृष्ठ क्लाइंट पर रेंडर करता है तो आप इसे अपने टेक्स्ट फील्ड कंटेंट के विभाजन से आबाद कर सकते हैं।

फिर, जब आप इसे पोस्ट करने के लिए तैयार होते हैं, तो आप अपने संशोधित से छिपे हुए फ़ील्ड की सामग्रियों को फिर से खोलते हैं <select>। फिर, निश्चित रूप से, आपको उस सर्वर पर फिर से विभाजित करना होगा और अपने आइटम के साथ कुछ करना होगा, क्योंकि आपका चयन अब खाली है जो सर्वर पर वापस आ गया है।

सब सब में यह एक बहुत ही बोझिल समाधान है कि मैं वास्तव में सिफारिश नहीं करूंगा, लेकिन अगर आपको वास्तव में एक लिस्टबॉक्स के क्लाइंट-साइड संशोधनों को करना है, तो यह काम करता है। मैं वास्तव में आपको इस मार्ग पर जाने से पहले एक अपडेट पैनल में देखने की सलाह दूंगा।


3
c, आपको चयनित आइटम को किसी छिपे हुए फ़ील्ड में रखने की आवश्यकता नहीं है, यदि आप चयन बॉक्स रनैट = "सर्वर" बनाते हैं, तो आप Request.Form [ selectid .UnqiueID] से पोस्ट किए गए बैक वैल्यू को पढ़ सकते हैं । और यदि एकाधिक का चयन किया जाता है तो ब्राउजर इसे एक मान के रूप में पोस्ट करता है। नोट करें कि आइटम और नियंत्रण के चयनित गुण सर्वर पर गलत होंगे क्योंकि आपने क्लाइंट पर इट्रिमलिस्ट को संशोधित किया है जिसके बारे में सर्वर को पता नहीं है।
माइकल

माइकल, कि काम किया। जब तक आप "एकाधिक = सत्य" जोड़ते हैं अन्यथा यह आपको केवल 1 मूल्य देगा। धन्यवाद
समीर Alibhai

1
Newline वर्णों के साथ ड्रॉपडाउन सूची के लिए एक ही मुद्दा था। एक चयन में बदलने के लिए पूरी तरह से काम किया। धन्यवाद!
22

मैंने सादे पुराने का उपयोग किया <select>, जिसने इस मुद्दे को हल किया। क्या आप मुझे बता सकते हैं कि क्लाइंट साइड एजैक्स डेटा लोड की तुलना में अपडेटपैड को डेटा लोड करने में अधिक समय क्यों लग रहा है?
प्राणेश

17

मैं एक पुनरावर्तक के साथ एक ही समस्या थी क्योंकि मेरे पास एक वेब-साइट में एक पुनरावर्तक नियंत्रण के साथ एक वेब-पेज था, जिसमें EnableEventValidation चालू था। यह अच्छा नहीं था। मुझे अमान्य पोस्टबैक से संबंधित अपवाद मिल रहे थे।

मेरे लिए जो काम किया गया वह रिपीटर के लिए EnableViewState = "false" को सेट करना था। लाभ यह है कि यह उपयोग करने के लिए सरल है, वेब-साइट या वेब-पेज के लिए इवेंट सत्यापन स्विचिंग के रूप में सरल है, लेकिन गुंजाइश या तो इवेंट सत्यापन स्विच करने की तुलना में बहुत कम है।


3
मुझे विरासत वेब नियंत्रण के साथ यह सटीक समस्या थी। हमारे वेब प्लेटफ़ॉर्म / सीएमएस (साइटकॉर) को एक बड़ा अपडेट मिला, जो इवेंट वैलिडेशन पर बदल गया (यह पहले बंद हो गया था! यूच!)। पुनरावर्तक नियंत्रण एक वेब गैलरी में छवियों को प्रदर्शित कर रहा था (उन्हें पुनर्व्यवस्थित करने के लिए बटन के साथ) और इन बटनों के पोस्टबैक पर अपवाद होगा। मैंने EnableViewState = "false" का उपयोग करते हुए रिपीटर्स पर दृश्य स्थिति को अक्षम कर दिया है जैसा कि आपने सुझाव दिया था और यह काम किया है। जैसा कि अन्य ने पाया है, ओवरराइडिंग रेंडर () और ClientScriptManager.RegisterForEventValidation () का उपयोग करना मेरे लिए कारगर नहीं रहा। धन्यवाद!
xan

@Xan की तरह मैं भी Sitecore का उपयोग करता हूं और यह वही है जिसकी मुझे आवश्यकता थी।
wilsjd

इसने मेरे लिए भी काम किया। AJAX अपडेट पैनल ने भी काम किया होगा, लेकिन यह फूला हुआ था कि मुझे इस मामले में ज़रूरत नहीं थी, इसलिए धन्यवाद उमर फारूक ख्वाजा।
ब्रायन

17

उपरोक्त में से किसी ने भी मेरे लिए काम नहीं किया। अधिक खुदाई के बाद मुझे एहसास हुआ कि मैंने पृष्ठ पर लागू किए गए 2 रूपों को नजरअंदाज कर दिया था जो इस समस्या का कारण था।

<body>
<form id="form1" runat="server">
<div>
        <form action="#" method="post" class="form" role="form">
        <div>
        ...
        <asp:Button ID="submitButton" runat="server"
        </div>
</div>
</body>

विदित हो कि हाल ही में ASP.NET ने iframes को एक फॉर्म टैग के भीतर विचार करना शुरू किया है, जिसमें iframe दस्तावेज में एक फॉर्म टैग होता है जो स्वयं नेस्टेड फ्रेम है। मुझे इस त्रुटि से बचने के लिए प्रपत्र टैग से iframe को स्थानांतरित करना पड़ा।


12

क्लाइंट पर जावास्क्रिप्ट का उपयोग करके एक लिस्टबॉक्स को संशोधित करते समय मुझे एक ही समस्या थी। यह तब होता है जब आप क्लाइंट से नए आइटम जोड़ते हैं जो उस समय नहीं थे जब पेज रेंडर किया गया था।

मुझे जो फिक्स मिला, वह क्लाइंट से जोड़ी जा सकने वाली सभी संभावित मान्य वस्तुओं की ईवेंट वैलिडेशन सिस्टम को सूचित करना है। आप Page.Render को ओवरराइड करके और Page.ClientScript.RegisterForEventValidation को प्रत्येक मान के लिए करते हैं जो आपका जावास्क्रिप्ट सूची बॉक्स में जोड़ सकता है।

protected override void Render(HtmlTextWriter writer)
{
    foreach (string val in allPossibleListBoxValues)
    {
        Page.ClientScript.RegisterForEventValidation(myListBox.UniqueID, val);
    }
    base.Render(writer);
}

यह एक तरह का दर्द हो सकता है यदि आपके पास सूची बॉक्स के लिए संभावित वैध मानों की एक बड़ी संख्या है। मेरे मामले में मैं दो ListBoxes के बीच आइटम ले जा रहा था - एक जिसमें सभी संभावित मान हैं और दूसरा जो शुरू में खाली है, लेकिन उपयोगकर्ता द्वारा बटन क्लिक करने पर जावास्क्रिप्ट में पहले एक से मानों के सबसेट के साथ भर जाता है। इस मामले में आपको केवल पहले सूची बॉक्स में आइटम के माध्यम से पुनरावृति करने की आवश्यकता है, दूसरी सूची बॉक्स के साथ प्रत्येक को पंजीकृत करें:

protected override void Render(HtmlTextWriter writer)
{
    foreach (ListItem i in listBoxAll.Items)
    {
        Page.ClientScript.RegisterForEventValidation(listBoxSelected.UniqueID, i.Value);
    }
    base.Render(writer);
}

9

यहां उल्लेख नहीं किया गया एक अन्य तरीका है लिस्टबॉक्स को उप-वर्ग करना

अर्थात।

public class ListBoxNoEventValidation : ListBox 
{
}

अगर आप स्पष्ट रूप से इसे वापस जोड़ते हैं, तो यह कभी भी सत्यापन रूटीन नहीं कहेगा। यह किसी भी नियंत्रण के साथ काम करता है, और एकमात्र तरीका है जिसे मैंने इसे नियंत्रण के आधार पर "अक्षम" करने के लिए पाया है (यानी, पृष्ठ स्तर नहीं)।


2
अच्छी तरह से यहाँ वर्णित है
पावेल होडेक

1
मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका पता है। हमें पेज स्तर पर नियंत्रण स्तर पर इसे ठीक करना चाहिए और उस लिंक के लिए @PavelHodek के लिए +1 शामिल किए गए सभी नियंत्रणों की सुरक्षा को जोखिम में डालना चाहिए।
जेम्स पौलोज

दुर्भाग्य से, ऐसा प्रतीत होता है कि यदि आप ऐसा करते हैं, तो ग्राहक द्वारा जोड़े गए किसी भी सूची आइटम को पृष्ठ वापस पोस्ट किए जाने पर चयनित आइटम नहीं होने पर मान्यता नहीं दी जाएगी।
जोनाथन वुड

9

आप अपने .aspx पेज में ऐसा कुछ करने की कोशिश करते हैं

जोड़ना

EnableEventValidation = "false"

आप किसी भी सवाल पूछने के लिए स्वतंत्र महसूस हो रहा है!


मैं तर्क दूंगा कि अगर इस मामले में त्रुटि को रोकने के लिए फ्रेमवर्क द्वारा बिल्ड-इन वैलिडेशन ऑफर को निष्क्रिय कर दिया जाए तो यह सबसे उचित समाधान होगा।
जुवियाचेस

8

यदि आप क्लाइंट साइड स्क्रिप्ट के माध्यम से ड्रॉपडाउनलिस्ट भरते हैं, तो फॉर्म को सर्वर पर वापस भेजने से पहले सूची को साफ़ करें; तब ASP.NET शिकायत नहीं करेगा और सुरक्षा अभी भी जारी रहेगी।

और डीडीएल से चुने गए डेटा को प्राप्त करने के लिए, आप एक छिपे हुए इनपुट में या शैली के साथ एक टेक्स्टबॉक्स में मूल्य एकत्र करने के लिए "ओएनसीचेंज" घटना को डीडीएल में संलग्न कर सकते हैं = "प्रदर्शन: कोई नहीं;"


+1 करना आसान है। सबसे साफ नहीं हो सकता है, लेकिन काफी आसान है।
23

7

3: मैंने अपने बटन प्रकार को ग्रिड पुश में "पुशबटन" से "लिंकबटन" में बदल दिया। इसने काम कर दिया! ("ButtonType =" LinkButton ") मुझे लगता है कि यदि आप अन्य मामलों में" LinkButton "जैसे अन्य नियंत्रणों के लिए अपने बटन को बदल सकते हैं, तो यह ठीक से काम करेगा।

काश, मैं आपको वोट दे सकता, आमिर (अफसोस मेरा प्रतिनिधि बहुत कम है।) मुझे बस यह समस्या हो रही थी और इसे बदलने के लिए मैंने अपने ग्रिडव्यू पर एक विजेता की तरह काम किया। थोड़ा हटकर, मुझे लगता है कि मान्य कोड है: ButtonType = "लिंक"

मुझे इस पर संदेह है क्योंकि जब आप 'संपादन' पर क्लिक करते हैं, तो आपका संपादन 'अपडेट' और 'रद्द' में बदल जाता है, जो बाद में वापस 'संपादित' में बदल जाता है। और ये शिफ्टिंग नियंत्रण .net असहज करते हैं।


इस समस्या की जड़ asp.net Eventvalidation मॉडल है और क्या "पेज" क्लाइंट द्वारा उस बिंदु पर संशोधित किया जाता है जब आप कोई पोस्ट वापस करते हैं। आपका क्या मतलब है '..... और ये शिफ्टिंग कंट्रोल .net असहज' ??
जूलियस एक

7

(1) EnableEventValidation = "false" ................... यह मेरे लिए काम नहीं करता है।

(2) ClientScript.RegisterForEventValidation .... यह मेरे लिए काम नहीं करता है।

समाधान 1:

GridView में बटन / इमेजबटन को लिंकबटन में बदलें। यह काम करता हैं। (लेकिन मुझे इमेजबटन पसंद है)

रिसर्च: बटन / इमेजबटन और लिंकबटन पोस्टबैक के लिए विभिन्न तरीकों का उपयोग करते हैं

मूल लेख:

http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx

समाधान 2:

ऑनइनिट () में, बटन / इमेजबटन के लिए यूनिक आईडी सेट करने के लिए कोड कुछ इस तरह दर्ज करें:

protected override void OnInit(EventArgs e) {
  foreach (GridViewRow grdRw in gvEvent.Rows) {

  Button deleteButton = (Button)grdRw.Cells[2].Controls[1];

  deleteButton.ID = "btnDelete_" + grdRw.RowIndex.ToString();           
  }
}

मूल लेख:

http://www.c-sharpcorner.com/Forums/Thread/35301/


6

मैंने एक नेस्टेड ग्रिड दृश्य लागू किया है और मैंने भी इसी समस्या का सामना किया है। मैंने इस तरह की छवि बटन के बजाय लिंकबटन का उपयोग किया है:

इससे पहले कि मैं इस तरह एक स्तंभ था:

<asp:TemplateField ItemStyle-Width="9">
  <ItemTemplate>
 <asp:ImageButton ID="ImgBtn" ImageUrl="Include/images/gridplus.gif" CommandName="Expand"
                        runat="server" />
  </ItemTemplate>
</asp:TemplateField>

मैंने इस तरह प्रतिस्थापित किया है।

<asp:TemplateField>
<ItemTemplate>
     <asp:LinkButton  CommandName="Expand" ID="lnkBtn"  runat="server" ><asp:Image  ID="Img"  runat="server" ImageUrl="~/Images/app/plus.gif" /></asp:LinkButton>
      </ItemTemplate>
</asp:TemplateField> 

5

मेरे पास एक समान मुद्दा था, लेकिन मैं ASP.Net 1.1 का उपयोग नहीं कर रहा था और न ही जावास्क्रिप्ट के माध्यम से नियंत्रण को अपडेट कर रहा था। मेरी समस्या केवल फ़ायरफ़ॉक्स पर हुई और आईई (!) पर नहीं।

मैंने इस तरह PreRender इवेंट पर एक DropDownList में विकल्प जोड़े:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string[] opcoes = HF.value.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

मेरे "एचएफ" (हिडनफील्ड) के पास इस तरह से न्यूलाइन द्वारा अलग किए गए विकल्प थे:

HF.value = "option 1\n\roption 2\n\roption 3";

समस्या यह थी कि ड्रॉपडाउन का प्रतिनिधित्व करने वाले "चयन" के विकल्पों पर एचटीएमएल पेज टूट गया था (मेरा मतलब था कि नई सुर्खियाँ थीं)।

इसलिए मैंने अपनी समस्या को एक पंक्ति में जोड़कर हल किया:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string dados = HF.Value.Replace("\r", "");
string[] opcoes = dados.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

आशा है कि यह किसी की मदद करेंगे।


4

अगर आप को बदलने UseSubmitBehavior="True" के लिए UseSubmitBehavior="False"अपनी समस्या को हल कर दिया जाएगा

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />

यह मेरे लिए काम नहीं किया। हालांकि मैं एक इमेजबटन का उपयोग कर रहा हूं, और एक पुनरावर्तक में तालिका में, इसलिए यह बिल्कुल वैसी स्थिति नहीं है। पुनरावर्तक के दृष्टिकोण को अक्षम करना मेरे लिए काम करता है।
ब्रायन

3

मेरे पास एक ही समस्या है, मैंने क्या किया:

बस एक शर्त जोड़ी if(!IsPostBack)और यह ठीक काम करता है :)



2

इस स्थिति में ग्रिड के RowDataBound में बटन को जोड़ें। यह आपकी समस्या का समाधान करेगा।



2

Ajax UpdatePanel इसे बनाता है, और मुझे लगता है कि यह सबसे आसान तरीका है, अजाक्स पोस्टबैक ओवरहेड की अनदेखी करना ।


2

मुझे पता है कि यह एक सुपर-पुरानी पोस्ट है। यह मानते हुए कि आप अपने आवेदन में बुला रहे हैं, यहाँ एक विचार है जो मेरे लिए काम कर रहा है:

  1. अपने पेज पर ICallbackEventHandler लागू करें
  2. अपने सर्वर साइड कोड को कॉल करने के लिए ClientScriptManager.GetCallbackEventReference पर कॉल करें
  3. जैसा कि त्रुटि संदेश बताता है, आप तब ClientScriptManager.RegisterForEventValidation को कॉल कर सकते हैं

यदि आपको कुल नियंत्रण की आवश्यकता नहीं है, तो आप एक अपडेट पैनल का उपयोग कर सकते हैं जो आपके लिए ऐसा करेगा।


2

जब हम अपने नियमित ASPX पृष्ठों को सामग्री पृष्ठों में परिवर्तित कर रहे थे, तो हम इसी समस्या में भाग गए।

इस समस्या वाले पृष्ठ </form>में सामग्री अनुभागों में से एक के भीतर एक टैग था , इस प्रकार दो फॉर्म एंड टैग रन टाइम पर प्रदान किए गए थे जिससे यह समस्या उत्पन्न हुई। पृष्ठ से अतिरिक्त फ़ॉर्म एंड टैग को हटाकर इस समस्या को हल किया गया।


धन्यवाद, यह पता चला है कि मेरे पास <form>मेरे कोड में भी अतिरिक्त क्षेत्र थे।
एरिक किगथी

2

यदि आप ग्रिडव्यू का उपयोग कर रहे हैं और अंदर pageload पर ग्रिडव्यू नहीं बांधें! Ispostback तब यह त्रुटि तब होती है जब आप ग्रिडव्यू में edit और row पर क्लिक करते हैं।

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        bindGridview();
        }

1

चार मिनट पहले मुझे वही त्रुटि मिली। फिर मैंने आपके जैसे एक आधे घंटे के दौरान शोध किया है। सभी मंचों में वे आम तौर पर "पेज सक्षम करें जोड़ें = = गलत या सही" कह रहे हैं। किसी भी समाधान का प्रस्ताव मेरी समस्याओं को हल नहीं किया जब तक कि मैंने इसे नहीं पाया। समस्या दुर्भाग्य से ASP.NET बटन है। मैंने इसे दो सेकंड पहले हटा दिया था। मैंने "इमेजबटन" से बदलने की कोशिश की, लेकिन यह भी अस्वीकार्य था (क्योंकि यह एक ही त्रुटि थी)।

अंत में मैंने साथ ले लिया है LinkButton। लगता है यह काम कर रहा है!


1

मैं डैटलिस्ट का उपयोग कर रहा था और मुझे अपने पुश बटन के लिए वही त्रुटि मिल रही थी। मैं सिर्फ अपने नियंत्रणों की जांच करने और भरने के लिए IsPostBack का उपयोग करता हूं और समस्या हल हो गई है! महान!!!


1

मेरे लिए जो काम किया गया है वह निम्नलिखित कोड को page_load से page_prerender में ले जा रहा है:

lstMain.DataBind();
Image img = (Image)lstMain.Items[0].FindControl("imgMain");

// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
    cs.RegisterStartupScript(cstype, csname1, "<script language=javascript> p=\"" + img.ClientID + "\"</script>");
}

1

सबसे अच्छा विकल्प छिपा हुआ क्षेत्र का उपयोग करना है और घटना सत्यापन को अक्षम नहीं करना है, साथ ही प्रत्येक लिस्टबॉक्स को बदलना है, ड्रॉपडाउनलिस्ट को रनटेट विशेषता के साथ चयन करना है


एस्प कंट्रोल से रेगुलर में बदलना <select id = "director" runat = "server"> ने शानदार काम किया। मैं उपयोग करने के पीछे कोड में इसके मूल्य का उपयोग करने में सक्षम था: ex .: string directorId = Request.Form [director.ID]
बैक्सटर

1

यदि आप Ajax अपडेट पैनल का उपयोग कर रहे हैं। <Triggers>टैग जोड़ें और इसके अंदर बटन को ट्रिगर करें या नियंत्रण का उपयोग करके पोस्टबैक का कारण बनें<asp:PostBackTrigger .../>


1

यदि आप जानते हैं कि जिस डेटा को पॉपुलेट किया जा सकता है, आप इस समस्या को हल करने के लिए ClientScriptManager का उपयोग कर सकते हैं। मेरे पास यह मुद्दा था जब पिछले उपयोगकर्ता चयन पर जावास्क्रिप्ट का उपयोग करके ड्रॉप डाउन बॉक्स को गतिशील रूप से पॉपुलेट किया गया था।

रेंडर विधि (वीबी और सी # में) को ओवरराइड करने और ड्रॉपडेलिस्टड डीडीकार के लिए संभावित मूल्य घोषित करने के लिए यहां कुछ उदाहरण कोड है।

VB में:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    Dim ClientScript As ClientScriptManager = Page.ClientScript

    ClientScript.RegisterForEventValidation("ddCar", "Mercedes")

    MyBase.Render(writer)
End Sub

या C # में थोड़ी भिन्नता हो सकती है:

protected override void Render(HtmlTextWriter writer)
{
    Page.ClientScript.RegisterForEventValidation("ddCar", "Mercedes");
    base.Render(writer);
}

Newbies के लिए: यह फ़ाइल (.vb या .cs) के पीछे कोड में जाना चाहिए या यदि aspx फ़ाइल में उपयोग किया जाता है तो आप <script>टैग में लपेट सकते हैं ।


1

यही कारण था कि मुझे यह मिल रहा था:

मेरे पास ASP: ListBox था। शुरू में यह छिपा हुआ था। क्लाइंट की ओर से मैं इसे AJAX के माध्यम से विकल्पों के साथ आबाद करूंगा। उपयोगकर्ता ने एक विकल्प चुना। फिर सबमिट बटन पर क्लिक करने पर, सर्वर को लिस्टबॉक्स के बारे में सब कुछ अजीब लगेगा, क्योंकि उसे याद नहीं था कि उसके पास कोई विकल्प है।

इसलिए मैंने जो किया वह यह है कि फॉर्म को सर्वर पर वापस भेजने से पहले सभी सूची विकल्पों को स्पष्ट कर दूं। इस तरह से सर्वर ने शिकायत नहीं की क्योंकि सूची क्लाइंट के पास खाली चली गई और वह खाली वापस आ गई।

क्रमबद्ध किया गया !!!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.