অবৈধ পোস্টব্যাক বা কলব্যাক যুক্তি। ইভেন্টের বৈধতা '<পৃষ্ঠাগুলি সক্ষম করুনভোগীকরণ = "সত্য" /> ব্যবহার করে সক্ষম করা হয়েছে


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 Ajax আপডেটপ্যানেল ব্যবহার করুন। (লিস্টবক্সটি আপডেটপ্যানেলে রাখুন এবং একটি আপডেট ট্রিগার করুন, যদি আপনি তালিকা বাক্স যুক্ত করেন বা সরিয়ে থাকেন This
  • ক্লায়েন্ট-সাইড ভুলে যান এবং ক্লাসিক পোস্টব্যাক ব্যবহার করুন এবং তালিকাটি সার্ভার-সাইডটি যুক্ত বা সরান।

আশা করি এটা কাজে লাগবে.


আরও একটি বিকল্প: আইপোস্টব্যাকএভেন্টহ্যান্ডলার বাস্তবায়ন করুন এবং কল করুন জেএস __doPostBack ('<% = ইউনিকআইড.টাস্ট্রিং ()%>', আর্গ)
জিডিবিডেবল

উপরের পরামর্শগুলির উপর ভিত্তি করে, আমি আমার ড্রপডাউনগুলি একটি নিয়মিত এএসপি.নেট এসপিতে রাখি: আপডেটপ্যানেল, কোডের পিছনে ড্রপডাউনগুলি লোড করে তারপরে আপ নিউ রেকর্ড.আপডেট ();
রিকার্ডো অ্যাপলটন

183

আপনার কি পেজ_ল্ড ইভেন্টগুলিতে কোড রয়েছে? যদি হ্যাঁ, তবে সম্ভবত নিম্নলিখিতগুলি যুক্ত করে সহায়তা করবে।

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

আপনি যখন আপনার আদেশটিতে ক্লিক করেন এবং পৃষ্ঠা_লোডটি আবার চালানো হয় তখন এই ত্রুটিটি ছুঁড়ে ফেলা হয়, একটি সাধারণ জীবন চক্রের মধ্যে পেজ_ল্ড হয় -> আদেশে ক্লিক করুন -> পৃষ্ঠা_ল্ড (আবার) -> আইটেমকমন্ড ইভেন্ট প্রক্রিয়া করুন


7
আহা, অনেক ধন্যবাদ, আমার ক্ষেত্রে এটাই কৌশল ছিল! আমি পেজলোডে একটি ড্রপডাউনলিস্টটি পুনরায় লোড করেছি, এবং তাই ফ্রেমওয়ার্কটি ডিডিএলে আইটেমগুলির (নতুনগুলি) নিয়ন্ত্রণ হারিয়ে ফেলেছে এবং আমি যেটি ক্লিক করেছি (যা আর উপস্থিত ছিল না)
মিশেল

আমার ওপি-র মতো একই ত্রুটি ছিল ... আমি আমার ফর্মটিতে একটি উইজার্ড ব্যবহার করছিলাম এবং আমি আমার পৃষ্ঠা লোডের 0 টি পদক্ষেপটি কল করছিলাম। অপসারণ এবং সমস্যা অদৃশ্য। ধন্যবাদ ...
25:48

এই উত্তরের জন্য অনেক ধন্যবাদ .... একই সমস্যা ছিল এবং এটি প্রমাণিত হয়েছিল যে আমার গ্রিডে ডেটা লোড করার সময় আমি পোস্টব্যাকগুলি উপেক্ষা করতে ভুলে গিয়েছিলাম ... আমাকে অনেক সময় বাঁচায়
কোয়াগমায়ার

10
Duh! এমভিসি থেকে ওয়েবফোমে ফিরে আসা একটি ব্যথা। এটি সঠিক উত্তর
বিষ্ণু রাথ

2
আমি এটি করেছি, তবে এটি আমার পক্ষে কার্যকর হয়নি কারণ পৃষ্ঠা-লোড ইভেন্টে যখন পোস্টব্যাক না হয় তখনই আমাকে কোড চালাতে হয় এবং তাই আমি এখনও একই ত্রুটি পেয়েছি। আমার পুনরুক্তারের জন্য ভিউস্টেটটি অক্ষম করা এর পরিবর্তে সমস্যার সমাধান করেছে।
ব্রায়ান

40

ডেটাগ্রিডের সাথে আমার একটা অভিজ্ঞতা ছিল। এর কলামগুলির মধ্যে একটি ছিল "নির্বাচন করুন" বোতাম। আমি যখন কোনও সারির "নির্বাচন করুন" বোতামটি ক্লিক করছিলাম তখন আমি এই ত্রুটি বার্তাটি পেয়েছি:

"অবৈধ পোস্টব্যাক বা কলব্যাক তর্ক মূলত এগুলি রেন্ডার করে the

আমি বেশ কয়েকটি কোড পরিবর্তন করেছি এবং শেষ পর্যন্ত আমি সফল হয়েছি। আমার অভিজ্ঞতার রুট:

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এটা কাজ করেছে! ("বাটনটাইপ =" লিংক বাটন ") I আমি মনে করি আপনি যদি অন্যান্য ক্ষেত্রে" লিংক বাটন "এর মতো আপনার নিয়ন্ত্রণ বাটনকে অন্য নিয়ন্ত্রণে পরিবর্তন করতে পারেন তবে এটি সঠিকভাবে কাজ করবে।


1
আমার সমাধানটি ছিল ডেটাগ্রিডের মধ্যে নেস্টিং বোতামগুলিকে ছেড়ে দেওয়া। এমএস আবার আমাকে ব্যর্থ করে।
জ্যাকবস ডেটা সলিউশন

আপনার সমাধান আমার জন্য কাজ করা হয়। ধন্যবাদ. তবে আমি জানতে চাই যে একই প্রোগ্রামে কাজ Buttonকরার সময় কেন কাজ করছে না linkButton। যদি তাই হয়, আমাদের কি সর্বদা ব্যবহার করা উচিত linkButton? কীভাবে আমরা আরও নমনীয় করতে পারি?
ফ্রাঙ্ক মায়াট থু

8
আপনার বাটন UseSubmitBehavior যোগ করার চেষ্টা করুন = "false" stackoverflow.com/questions/2968525/...
JJschk

আশ্চর্যজনক :) :) আপনি কেবল অভিজ্ঞতার মাধ্যমে এটি শিখতে পারেন .. আপনি বাস্তব দৃশ্যের টোটাল শো প্রমাণ করেছেন অভিজ্ঞতাই সেরা শিক্ষক .. দুর্দান্ত উত্তর এবং ব্যাখ্যা!
saun4frsh

রেন্ডার ইউআর পিএস বেস করতে হবে ওভাররাইডে ender রেন্ডার (লেখক); শেষে ... অন্যথায় এটি কাজ করবে না!
পল জহরা

28

আপনি সত্যিই 2 বা 3 করতে চান, ইভেন্টের বৈধতা অক্ষম করবেন না।

এপগুলিতে আইটেম যুক্ত করার ক্ষেত্রে দুটি প্রধান সমস্যা রয়েছে: তালিকাবক্স ক্লায়েন্ট সাইড।

  • প্রথমটি এটি ইভেন্টের বৈধতার সাথে হস্তক্ষেপ করে। সার্ভারে যা ফিরে এসেছিল তা এটি যা পাঠিয়েছিল তা নয়।

  • দ্বিতীয়টি হ'ল এমনকি আপনি ইভেন্টের বৈধতা অক্ষম করলেও, যখন আপনার পৃষ্ঠাটি তালিকার বাক্সে থাকা আইটেমগুলি ভিউস্টেট থেকে পুনরায় তৈরি করা হবে, সুতরাং ক্লায়েন্টে আপনার করা কোনও পরিবর্তন হারাবে। এর কারণ হ'ল একটি এসপ নেটওয়্যারটি ক্লায়েন্টের তালিকায় থাকা কোনও লিস্টবক্সের বিষয়বস্তুটি পরিবর্তিত হবে বলে আশা করে না, এটি কেবল একটি নির্বাচন করা প্রত্যাশা করে, তাই এটি আপনার করা পরিবর্তনগুলি বাতিল করে দেয়।

সুপারিশ করা হয়েছে সবচেয়ে ভাল বিকল্পটি সম্ভবত আপডেট প্যানেলটি ব্যবহার করবে। আরেকটি বিকল্প, যদি আপনাকে সত্যই এই ক্লায়েন্টের পক্ষের প্রয়োজন হয় তবে তা হ'ল <select>পরিবর্তে একটি সাধারণ প্লেইন ব্যবহার করা <asp:ListBox>এবং আপনার আইটেমের তালিকাটি কোনও লুকানো ক্ষেত্রে রাখা। পৃষ্ঠাটি যখন ক্লায়েন্টে রেন্ডার হয় আপনি এটিকে আপনার পাঠ্য ক্ষেত্রের সামগ্রীর বিভাজন থেকে পপুলেশন করতে পারেন।

তারপরে, আপনি যখন এটি পোস্ট করার জন্য প্রস্তুত, আপনি নিজের সংশোধিত থেকে লুকানো ক্ষেত্রের বিষয়বস্তু পুনরায় তৈরি করুন <select>। তারপরে অবশ্যই, আপনাকে এটি আবার সার্ভারে বিভক্ত করতে হবে এবং আপনার আইটেমগুলির সাথে কিছু করতে হবে, যেহেতু আপনার নির্বাচনটি খালি খালি এখন এটি সার্ভারে ফিরে এসেছে।

সব মিলিয়ে এটি একটি জটিল জটিল সমাধান যা আমি সত্যিই সুপারিশ করব না, তবে যদি আপনাকে সত্যিই একটি তালিকাবক্সের ক্লায়েন্ট-সাইড পরিবর্তন করতে হয় তবে এটি কার্যকর হয় does যাইহোক, এই রুটে যাওয়ার আগে আপনাকে একটি আপডেটপ্যানেল সন্ধান করার জন্য আমি সত্যিই সুপারিশ করব।


3
গ, আপনি যদি আপনার করা নির্বাচন বক্স runat = "সার্ভার" আপনি Request.Form [থেকে পোস্ট ফিরে মান পড়তে পারেন একটি লুকানো মাঠে নির্বাচিত আইটেমগুলি রাখা প্রয়োজন হবে না selectid .UnqiueID]। এবং যদি একাধিক নির্বাচন করা হয় তবে ব্রাউজারটি এটি সিএসভি হিসাবে মানগুলি পোস্ট করে। নোট করুন আইটেমগুলি এবং নিয়ন্ত্রণের নির্বাচিত তালিকা সূচকটি সার্ভারের উপর থেকে ভুল হবে যেহেতু আপনি ক্লায়েন্টের আইট্রিমলিস্টটি সংশোধন করেছেন যা সার্ভারটি জানেন না।
মাইকেল

মাইকেল, যে কাজ। যতক্ষণ আপনি "একাধিক = সত্য" যুক্ত করেন অন্যথায় এটি আপনাকে কেবল 1 মান দেবে। ধন্যবাদ
সমীর আলিভাই

1
নিউলাইন চরিত্রগুলির সাথে ড্রপডাউনলিস্টের জন্য একই সমস্যা ছিল। একটি নির্বাচনে পরিবর্তন পুরোপুরি কাজ করে। ধন্যবাদ!
ছয়

আমি সরল পুরানো ব্যবহার করেছি <select>, যা সমস্যার সমাধান করেছে। আপনি দয়া করে আমাকে বলতে পারবেন কেন ক্লায়েন্ট সাইড এজ্যাক্স ডেটা লোডের তুলনায় আপডেটপ্যানেল ডেটা লোড করতে বেশি সময় নিচ্ছে?
প্রণেশ জনার্থনন

17

রিপিটারের সাথে আমারও একই সমস্যা ছিল কারণ আমার ওয়েব সাইটে একটি রিপিটার নিয়ন্ত্রণের সাথে একটি ওয়েব পৃষ্ঠা ছিল যা এ্যাভেলভেন্টিভিলেশন চালু ছিল। এটা ভাল ছিল না। আমি অবৈধ পোস্টব্যাক সম্পর্কিত ব্যতিক্রম পাচ্ছিলাম।

আমার জন্য যা কাজ করেছে তা হ'ল পুনর্বারকারীর জন্য সক্ষম ভিউস্টেট = "মিথ্যা" সেট করা। সুবিধাগুলি হ'ল এটি ব্যবহার করা সহজ, ওয়েব-সাইট বা ওয়েব-পৃষ্ঠার জন্য ইভেন্টের বৈধতা স্যুইচ করার মতো সহজ, তবে ইভেন্টের বৈধতাটিকে উভয়ের জন্য স্যুইচ করার চেয়ে সুযোগটি অনেক কম।


3
উত্তরাধিকারী ওয়েব নিয়ন্ত্রণে আমার এই সঠিক সমস্যাটি ছিল। আমাদের ওয়েব প্ল্যাটফর্ম / সিএমএস (সিটিকোর) একটি বড় আপডেট পেয়েছে যা ইভেন্টের বৈধকরণটি চালু করে (এটি আগে বন্ধ ছিল! অচ!)। রিপিটার নিয়ন্ত্রণ একটি ওয়েব গ্যালারীতে চিত্রগুলি প্রদর্শন করছিল (তাদের পুনরায় সাজানোর বোতাম সহ) এবং এই বোতামগুলির পোস্টব্যাকে ব্যতিক্রম ঘটবে। আপনার পরামর্শ অনুযায়ী আমি সক্ষম ভিউস্টেট = "মিথ্যা" ব্যবহার করে পুনরায়কারগুলিতে দর্শনীয় স্থিতি অক্ষম করেছি এবং আরে এটি কাজ করেছে st অন্যরা যেমন খুঁজে পেয়েছে, রেন্ডার () র ওভাররাইডিং এবং ক্লায়েন্টস্ক্রিপ্টম্যানেজ.আরজিস্টার ফর এভেন্টভালিডেশন () আমার পক্ষে কাজ করে নি। ধন্যবাদ!
xan

@ এক্সানের মতো আমিও সিটিকোর ব্যবহার করি এবং এটি আমার প্রয়োজন ঠিক তাই।
উইলসড

এটি আমার জন্যও কাজ করেছিল। এজেএক্স আপডেট প্যানেলটিও কাজ করতে পারত, তবে এটি আমার মাথার উপরে ফুলে উঠেছে যে আমার ক্ষেত্রে দরকার নেই, তাই আপনাকে উমর ফারুক খাজাবাদকে ধন্যবাদ জানাই।
ব্রায়ান

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>

সচেতন হোন যে সম্প্রতি এএসপি.এনইটি যদি কোনও ফর্ম ট্যাগের মধ্যে আইফ্রেমে বিবেচনা করা শুরু করেছে যা নিজেরাই যদি নেস্টেড ফ্রেমের মধ্যে iframe ডকুমেন্টে একটি ফর্ম ট্যাগ থাকে। এই ত্রুটিটি এড়াতে আমাকে ফর্ম ট্যাগের বাইরে iframe সরানো হয়েছিল।


12

ক্লায়েন্টে জাভাস্ক্রিপ্ট ব্যবহার করে একটি তালিকাবক্স সংশোধন করার সময় আমার একই সমস্যা ছিল। এটি তখন ঘটে যখন আপনি ক্লায়েন্টের তালিকা তালিকাতে নতুন আইটেম যুক্ত করবেন যা পৃষ্ঠাটি রেন্ডার করার সময় ছিল না there

আমি যে সমাধানটি পেয়েছি তা হ'ল ক্লায়েন্টের কাছ থেকে যুক্ত হওয়া সমস্ত সম্ভাব্য বৈধ আইটেমগুলির ইভেন্টের বৈধতা সিস্টেমকে অবহিত করা। আপনি পৃষ্ঠাটি ওভাররাইড করে এইটি করেন Page পৃষ্ঠাটি রেন্ডার করে এবং কল করে।

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

যদি আপনার তালিকার বাক্সের জন্য প্রচুর পরিমাণে বৈধ মান থাকতে পারে তবে এটি এক ধরনের বেদনা হতে পারে। আমার ক্ষেত্রে আমি দুটি তালিকাবক্সের মধ্যে আইটেমগুলি সরিয়েছিলাম - এটির যে সমস্ত সম্ভাব্য মান রয়েছে এবং অন্যটি প্রাথমিকভাবে খালি কিন্তু যখন জাভাস্ক্রিপ্টে প্রথমটির মানটি একটি সাবসেট দিয়ে পূর্ণ হয় যখন ব্যবহারকারী কোনও বোতাম ক্লিক করে। এই ক্ষেত্রে আপনাকে কেবল প্রথম তালিকাবক্সে আইটেমগুলি দিয়ে পুনরাবৃত্তি করতে হবে এবং দ্বিতীয় তালিকা বাক্সের সাথে প্রত্যেকে নিবন্ধন করুন:

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 
{
}

ক্লায়েন্টএভেন্টভালিডেশন কীগুলি অ্যাট্রিবিউট সিস্টেমটি বন্ধ করে দেয় e ওয়েবে.ইউ.আই.সপপোর্টসসেন্টভালিডেশন যদি আপনি এটি সাবক্লাস করেন, যদি না আপনি স্পষ্টভাবে এটিকে আবার যুক্ত না করেন, এটি কখনই বৈধকরণ রুটিনকে কল করবে না। এটি যে কোনও নিয়ন্ত্রণের সাথে কাজ করে এবং নিয়ন্ত্রণের ভিত্তিতে একটি নিয়ন্ত্রণে এটি "অক্ষম" করার একমাত্র উপায় আমি পেয়েছি (অর্থাত্ পৃষ্ঠার স্তর নয়)।


2
সুন্দরভাবে এখানে বর্ণিত ।
পাভেল হোদেক

1
আমি মনে করি সম্বোধনের সর্বোত্তম উপায় হ'ল এটি করা। আমাদের এটি পৃষ্ঠার স্তরের পরিবর্তে নিয়ন্ত্রণ স্তরে ফিক্স করা উচিত এবং জড়িত সমস্ত নিয়ন্ত্রণের সুরক্ষার ঝুঁকি +1 করা উচিত এবং সেই লিঙ্কটির জন্য @ পাভেলহোডেকের জন্য ধন্যবাদ।
জেমস পলুস

দুর্ভাগ্যক্রমে, এটি উপস্থিত হয় যে আপনি যদি এটি করেন তবে ক্লায়েন্টে যুক্ত হওয়া কোনও তালিকা আইটেম পৃষ্ঠাটি পোস্ট করার পরে আইটেম নির্বাচিত হলে তা স্বীকৃত হবে না।
জোনাথন উড

9

আপনি .aspx পৃষ্ঠায় এরকম কিছু চেষ্টা করে দেখুন

যোগ

EnableEventValidation = "FALSE"

আপনি কোন প্রশ্ন জিজ্ঞাসা নির্দ্বিধায়!


আমি তর্ক করব যদি ত্রুটি দেখা বন্ধ করতে এই কাঠামোর দ্বারা বিল্ড-ইন বৈধতা অফারটি অক্ষম করে তবে এই ক্ষেত্রে সবচেয়ে উপযুক্ত সমাধান হতে পারে।
জভিয়াচস

8

আপনি যদি ক্লায়েন্ট সাইড স্ক্রিপ্টের মাধ্যমে ড্রপডাউনলিস্টটি পূরণ করেন তবে ফর্মটি সার্ভারে জমা দেওয়ার আগে তালিকাটি সাফ করুন; তাহলে এএসপি.এনইটি অভিযোগ করবে না এবং সুরক্ষা এখনও থাকবে।

এবং ডিডিএল থেকে নির্বাচিত ডেটা পেতে, আপনি কোনও লুকানো ইনপুট বা স্টাইল = "প্রদর্শন সহ কোনও পাঠ্যবক্সে" মান সংগ্রহ করতে ডিডিএলের সাথে একটি "অন চেঞ্জ" ইভেন্ট সংযুক্ত করতে পারেন;


+1 কার্যকর করা সহজ। সবচেয়ে পরিষ্কার হতে পারে না, তবে যথেষ্ট সহজ।
nutsch

7

3: আমি গ্রিড কলামে আমার বোতামের ধরণটি "পুশবটন" থেকে "লিংক বাটন" তে পরিবর্তন করেছি। এটা কাজ করেছে! ("বাটনটাইপ =" লিংক বাটন ") আমি মনে করি আপনি যদি অন্যান্য ক্ষেত্রে" লিংক বাটন "এর মতো আপনার নিয়ন্ত্রণ বাটনকে অন্য নিয়ন্ত্রণে পরিবর্তন করতে পারেন তবে এটি সঠিকভাবে কাজ করবে।

আমি আশা করি আমি আপনাকে ভোট দিতে পারতাম, আমির (হায়রে আমার প্রতিনিধি খুব কম) আমার সমস্যাটি ছিল এবং আমার গ্রিডভিউতে এটি চ্যাম্পের মতো কাজ করে। কিছুটা দূরে, আমি মনে করি বৈধ কোডটি: বোতামটাইপ = "লিঙ্ক"

আমি সন্দেহ করি কারণ এটি যখন আপনি 'সম্পাদনা' ক্লিক করেন তখন আপনার সম্পাদনাটি 'আপডেট' এবং 'বাতিল' পরিবর্তিত হয় যা জমা দেওয়ার পরে 'সম্পাদনা' এ ফিরে আসে। এবং এই স্থানান্তর নিয়ন্ত্রণগুলি। নেটকে অস্বস্তিকর করে তোলে।


এই ইস্যুটির ক্রুসটি হ'ল এএসপিএন ইভেন্টটিওয়েডেশন মডেল এবং আপনি যখন কোনও পোস্ট ফেরত করবেন তখন "পৃষ্ঠা" ক্লায়েন্ট দ্বারা পরিবর্তিত হবে কিনা। আপনার অর্থ কী ... 'এবং এই স্থানান্তর নিয়ন্ত্রণগুলি। নেট অস্থির করে তোলে' ??
জুলিয়াস এ

7

(1) সক্ষম করুনপরিবর্তন = "মিথ্যা" ................... এটি আমার পক্ষে কাজ করে না।

(2) ক্লায়েন্টস্ক্রিপ্ট.আজিজিস্টার ফর এভেন্টভালিডেশন .... এটি আমার পক্ষে কাজ করে না।

সমাধান 1:

গ্রিডভিউতে লিংক বাটনে বাটন / ইমেজবটনটি পরিবর্তন করুন। এটা কাজ করে। (তবে আমি ইমেজবটন পছন্দ করি)

গবেষণা: বাটন / ইমেজবটন এবং লিংক বাটন পোস্টব্যাক করতে বিভিন্ন পদ্ধতি ব্যবহার করে

মূল নিবন্ধ:

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

সমাধান 2:

OnInit () এ, বোতাম / ইমেজবুটনের জন্য অনন্য আইডি সেট করতে কোডটির মতো কিছু প্রবেশ করুন:

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

আমি নেস্টেড গ্রিড ভিউ বাস্তবায়ন করেছি এবং আমিও একই সমস্যার মুখোমুখি হয়েছি I আমি ইমেজের বোতামের পরিবর্তে লিঙ্কবটন ব্যবহার করেছি:

আমার কলামটি এর আগে এ রকম ছিল:

<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

আমারও অনুরূপ সমস্যা ছিল তবে আমি এএসপি.নেট 1.1 ব্যবহার করছি না বা জাভাস্ক্রিপ্টের মাধ্যমে কোনও নিয়ন্ত্রণ আপডেট করছি না। আমার সমস্যাটি কেবল ফায়ারফক্সে ঘটেছে, আইই (!) এ নয়।

আমি প্রিনেন্ডার ইভেন্টের মতো ড্রপডাউনলিস্টে বিকল্পগুলি যুক্ত করেছি:

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

এই ক্ষেত্রে গ্রিডের রোডাটাবাউন্ডের বোতামে আইডি যুক্ত করুন। এটি আপনার সমস্যার সমাধান করবে।



2

আজাক্স আপডেটপ্যানেল এটি তৈরি করে এবং আমি মনে করি এটি অ্যাজাক্স পোস্টব্যাক ওভারহেড উপেক্ষা করে এটি সবচেয়ে সহজ উপায় ।


2

আমি জানি এটি একটি অতি পুরানো পোস্ট। ধরে নিই যে আপনি আপনার অ্যাপ্লিকেশনটিতে কল করছেন, এখানে একটি ধারণা যা আমার পক্ষে কাজ করেছে:

  1. আপনার পৃষ্ঠায় ICallbackEventHandler প্রয়োগ করুন
  2. আপনার সার্ভারের পাশের কোডটি কল করার জন্য ক্লায়েন্টস্ক্রিপ্টম্যানেজ করুন GGetCallbackEventReferences কল করুন
  3. ত্রুটি বার্তায় যেমন বলা হয়েছে, আপনি তারপরে ক্লায়েন্টস্ক্রিপ্টম্যানেজ.আরজিস্টারফোড়েন্টভালিডেশন কল করতে পারেন

আপনার যদি মোট নিয়ন্ত্রণের প্রয়োজন না হয় তবে আপনি একটি আপডেট প্যানেল ব্যবহার করতে পারেন যা এটি আপনার জন্য করবে।


2

আমরা যখন আমাদের নিয়মিত এএসপিএক্স পৃষ্ঠাগুলিকে সামগ্রী পৃষ্ঠাগুলিতে রূপান্তর করছিলাম তখন আমরা এই একই সমস্যায় পড়েছিলাম।

এই ইস্যুটির পৃষ্ঠায় </form>সামগ্রীর একটি বিভাগের মধ্যে একটি ট্যাগ ছিল , সুতরাং দুটি ফর্মের শেষের ট্যাগগুলি রান সময়ে রেন্ডার করা হয়েছিল যা এই সমস্যাটির কারণ হয়েছিল। পৃষ্ঠা থেকে অতিরিক্ত ফর্ম শেষ ট্যাগটি সরানো এই সমস্যাটিকে সমাধান করেছে।


ধন্যবাদ, দেখা যাচ্ছে যে <form>আমার কোডে আমার অতিরিক্ত ক্ষেত্রও ছিল ।
এরিক কিগাথি

2

আপনি যদি গ্রিডভিউ ব্যবহার করছেন এবং পৃষ্ঠার লোডের অভ্যন্তরে গ্রিডভিউটি বেঁধে রাখছেন না! ইসপোস্টব্যাক তখন গ্রিডভিউতে সম্পাদনা এবং সারি মুছে ফেলতে ক্লিক করার পরে এই ত্রুটি দেখা দেয়।

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

1

চার মিনিট আগে আমি একই ত্রুটি পেয়েছি। তারপরে আমি আপনার মতো আধ ঘন্টা সময় নিয়ে গবেষণা করেছি। সমস্ত ফোরামে তারা সাধারণত "পৃষ্ঠা সক্ষম করুন .. = মিথ্যা বা সত্য" বলছে। প্রস্তাবিত কোনও সমাধান আমার সমস্যাগুলি সমাধান না করা পর্যন্ত সমাধান করে নি। দুর্ভাগ্যক্রমে সমস্যাটি একটি এএসপি.নেট বোতাম। আমি এটি দুই সেকেন্ড আগে সরিয়েছি। আমি "ইমেজবটন" দিয়ে প্রতিস্থাপন করার চেষ্টা করেছি, তবে এটি অগ্রহণযোগ্যও ছিল (কারণ এটি একই ত্রুটি দিয়েছে)।

শেষ পর্যন্ত আমি প্রতিস্থাপন করেছি LinkButton। মনে হচ্ছে এটি কাজ করছে!


1

আমি ডাটালিস্ট ব্যবহার করছিলাম এবং আমার পুশ বোতামের জন্যও আমি একই ত্রুটি পাচ্ছিলাম। আমি আমার নিয়ন্ত্রণগুলি পরীক্ষা করতে এবং পূরণ করতে কেবল ইসপোস্টব্যাকটি ব্যবহার করি এবং সমস্যাটি সমাধান হয়ে গেছে! গ্রেট !!!


1

আমার জন্য যা কাজ করেছে তা নীচের কোডটি পৃষ্ঠা_লোড থেকে পৃষ্ঠা_প্রেরেণ্ডারে স্থানান্তরিত করছে:

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

করণীয় সর্বোত্তম বিকল্প হ'ল লুকানো ক্ষেত্র ব্যবহার করা এবং ইভেন্টের বৈধতা অক্ষম করবেন না, প্রতিটি লিস্টবক্সও পরিবর্তন করবেন, রানট সার্ভার বৈশিষ্ট্যের সাথে নির্বাচন করতে ড্রপডাউনলিস্ট


এএসপি নিয়ন্ত্রণ থেকে নিয়মিত <সিলেক্ট আইডি = "পরিচালক" রানাত = "সার্ভার"> এ দুর্দান্ত পরিবর্তন হয়েছে। প্রাক্তন .: স্ট্রিং directorId = Request.Form [director.ID]: আমি ব্যবহার পিছনে কোডে এর মান অ্যাক্সেস করতে সক্ষম ছিল
ব্যাক্সটার

1

আপনি যদি অ্যাজাক্স আপডেট প্যানেল ব্যবহার করেন। যোগ <Triggers>ট্যাগ এবং ভিতরে এটা বাটন ট্রিগার বা postBack ব্যবহার ঘটাচ্ছে নিয়ন্ত্রণ<asp:PostBackTrigger .../>


1

যদি আপনি জনসংখ্যাযুক্ত হতে পারে এমন ডেটা যদি জানেন তবে আপনি এই সমস্যাটি সমাধান করতে ক্লায়েন্টস্ক্রিপ্টম্যানেজারটি ব্যবহার করতে পারেন। পূর্ববর্তী ব্যবহারকারী নির্বাচনের জাভাস্ক্রিপ্ট ব্যবহার করে গতিশীলভাবে একটি ড্রপ ডাউন বাক্স পপুলেট করার সময় আমার এই সমস্যাটি ছিল।

রেন্ডার পদ্ধতির (ভিবি এবং সি # তে) ওভারড্রাইড এবং ড্রপডাউনলিস্ট ডিডিকারের জন্য একটি সম্ভাব্য মান ঘোষণা করার জন্য এখানে কয়েকটি উদাহরণ কোড রয়েছে।

ভিবিতে:

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

অথবা সি # তে কিছুটা ভিন্নতা হতে পারে:

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

Newbies এর জন্য: এটি ফাইলের (.vb বা .cs) এর পিছনে কোডে বা এসপেক্স ফাইলে ব্যবহৃত হলে আপনি <script>ট্যাগগুলিতে মোড়া করতে পারেন ।


1

এই কারণেই আমি এটি পেয়েছিলাম:

আমার একটি এএসপি ছিল: লিস্টবক্স। প্রাথমিকভাবে এটি লুকিয়ে ছিল। ক্লায়েন্টের পাশে আমি এজেএক্স এর মাধ্যমে অপশন সহ এটি স্থাপন করব। ব্যবহারকারী একটি বিকল্প বেছে নিয়েছে। তারপরে সাবমিট বাটনে ক্লিক করার পরে সার্ভারটি তালিকাবক্স সম্পর্কে সমস্ত মজাদার হয়ে উঠবে, যেহেতু এটি কোনও বিকল্প রেখে মনে রাখেনি।

সুতরাং আমি যা করেছি তা হ'ল এটি নিশ্চিত করা যে আমি সার্ভারে ফর্মটি জমা দেওয়ার আগে সমস্ত তালিকা বিকল্পগুলি সাফ করে দিয়েছি। এই তালিকাটি ক্লায়েন্টের কাছে খালি চলে যাওয়ার পরে সার্ভারটি অভিযোগ করেনি এবং এটি খালি ফিরে এসেছে।

সাজানো !!!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.