Geçersiz geri gönderme veya geri arama bağımsız değişkeni. Etkinlik doğrulaması '<pages enableEventValidation = “true” />' kullanılarak etkinleştirildi


238

İstemci tarafından bir sayfa geri gönderdiğimde aşağıdaki hatayı alıyorum. İstemci tarafında bir asp: ListBox değiştiren JavaScript kodu var.

Bunu nasıl düzeltebiliriz?

Aşağıdaki hata ayrıntıları:

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

Page_load olayında bir veri tabanı gerçekleştirmeyin.
Paul Zahra

Yanıtlar:


171

Sorun, ASP.NET'in bu ek veya kaldırılan listitem hakkında bilgi almamasıdır. Birkaç seçeneğiniz var (aşağıda listelenmiştir):

  • Olay doğrulamayı devre dışı bırakın (kötü fikir, çünkü çok az maliyetle gelen biraz güvenliği kaybedersiniz).
  • ASP.NET Ajax UpdatePanel kullanın. (Liste kutusunu Güncelleme paneline koyun ve liste kutusu ekler veya kaldırırsanız bir güncelleme tetikler. Bu şekilde viewstate ve ilgili alanlar güncellemeleri alır ve olay doğrulama geçer.)
  • İstemci tarafını unutun ve klasik postback'i kullanın ve sunucu tarafına liste öğeleri ekleyin veya kaldırın.

Umarım bu yardımcı olur.


Bir seçenek daha: IPostBackEventHandler'i uygulayın ve js __doPostBack ('<% = UniqueId.ToString ()%>', arg)
7

Yukarıdaki önerilere dayanarak, normal bir ASP.NET asp: UpdatePanel benim açılan koymak, arkasındaki kod ve sonra upNewRecord.Update ();
Ricardo Appleton

183

Page_Load etkinliklerinizde kodlarınız var mı? evet ise, belki aşağıdakileri ekleyerek yardımcı olacaktır.

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

Bu hata, komutunuzu tıklattığınızda atılır ve Page_load tekrar çalıştırılır, normal bir yaşam döngüsünde Page_Load -> Komut Tıkla -> Page_Load (tekrar) -> İşlem ItemCommand Olayı olur


7
Çok teşekkürler, benim durumumdaki hile buydu! Sayfa yükündeki bir açılır listeyi yeniden yükledim ve böylece çerçeve, ddl'deki öğelerin (yeni olanlar) kontrolünü kaybetti ve tıkladığım (artık mevcut değil)
Michel

OP ile aynı hatayla karşılaştım ... Formumda bir sihirbaz kullanıyordum ve sayfa yükümde 0 adımı çağırıyordum. kaldırıldı ve sorun ortadan kayboldu. Teşekkürler ...
tking

Bu cevap için çok teşekkürler .... Aynı sorun vardı ve ortaya çıktı Sadece benim ızgara veri yüklerken postbacks görmezden unutmuştu ... Bana çok zaman kazandırmak
Quagmire 14:12

10
Duh! MVC'den web formlarına geri dönmek bir acıdır. Bu doğru cevap
Vishnoo Rath

2
Bunu yaptım, ancak benim için işe yaramadı çünkü bir postback olmadığında için page_load olayında çalıştırmak zorunda kod var ve bu yüzden hala aynı hatayı aldım. Tekrarlayıcım için görünümün devre dışı bırakılması sorunu çözdü.
Bryan

40

DataGrid ile bir deneyim yaşadım. Sütunlarından biri "Seç" düğmesiydi. Herhangi bir satırın "Seç" düğmesini tıklarken bu hata iletisini almıştım:

"Geçersiz geri gönderme veya geri arama bağımsız değişkeni. Sayfada yapılandırma veya <% @ Page EnableEventValidation =" true "%> kullanılarak olay doğrulaması etkinleştirildi. Güvenlik nedeniyle, bu özellik geri gönderme veya geri arama olaylarına yönelik bağımsız değişkenlerin sunucu denetiminden kaynaklandığını doğrular. Veriler geçerli ve beklenen ise, geri gönderme veya geri arama verilerini doğrulama amacıyla kaydetmek için ClientScriptManager.RegisterForEventValidation yöntemini kullanın. "

Birkaç kodu değiştirdim ve sonunda başardım. Deneyim rotam:

1) Sayfa özelliğini olarak değiştirdim EnableEventValidation="false". Ama işe yaramadı. (bu yalnızca güvenlik nedeniyle tehlikeli olmakla kalmayıp, olay işleyicim çağrılmadı:void Grid_SelectedIndexChanged(object sender, EventArgs e)

2) ClientScript.RegisterForEventValidationRender yönteminde uyguladım . Ama işe yaramadı.

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) Izgara sütunundaki düğme türümü yerine olarak PushButtondeğiştirdim LinkButton. İşe yaradı! ("ButtonType =" LinkButton "). Sanırım düğmenizi" LinkButton "gibi diğer denetimlere değiştirebilirseniz, düzgün çalışır.


1
Benim çözümüm datagrid içindeki yerleştirme düğmelerinden vazgeçmekti. MS beni yine başarısızlığa uğrattı.
Jacobs Data Solutions

Sizin çözümünüz de benim için çalışıyor. Teşekkür ederim. Ama aynı programda çalışırken neden Buttonçalışmadığını bilmek istiyorum linkButton. Öyleyse, her zaman kullanmamız gerekir linkButtonmi? Nasıl daha esnek hale getirebiliriz?
Frank Myat Per

8
Düğmenize eklemeyi deneyin UseSubmitBehavior = "False" stackoverflow.com/questions/2968525/…
JJschk

Awesomeeeeeee :) .. Bunu sadece deneyimle öğrenebilirsiniz .. Gerçek scenerio tat gösterileri kanıtladı Deneyim en iyi öğretmendir .. Harika ans ve açıklama!
saun4frsh

İşleme için geçersiz kılmada base.Render (yazar) KOYMALISINIZ; sonunda ... aksi takdirde işe yaramaz!
Paul Zahra

28

Gerçekten 2 veya 3 yapmak isteyeceksiniz, etkinlik doğrulamayı devre dışı bırakmayın.

Asp'ye öğe eklemeyle ilgili iki ana sorun vardır: liste kutusu istemci tarafı.

  • Birincisi, olay doğrulamasına müdahale etmesidir. Sunucuya geri gelen, gönderdiği şey değildir.

  • İkincisi, etkinlik doğrulamasını devre dışı bıraksanız bile, sayfanız geri gönderildiğinde liste kutusundaki öğeler görünümden yeniden oluşturulacaktır, böylece istemcide yaptığınız değişiklikler kaybolur. Bunun nedeni, asp.net'in bir liste kutusunun içeriğinin istemcide değiştirilmesini beklememesi, yalnızca bir seçim yapılmasını beklemesidir, bu nedenle yapmış olabileceğiniz değişiklikleri atar.

En iyi seçenek, önerildiği gibi bir güncelleme paneli kullanması muhtemeldir. Bu istemci tarafını gerçekten yapmanız gerekiyorsa başka bir seçenek, bir <select>yerine eski bir düz kullanmak <asp:ListBox>ve öğe listenizi gizli bir alanda tutmaktır. Sayfa istemcide oluşturulduğunda, metni metin alanı içeriğinizin bir bölümünden doldurabilirsiniz.

Ardından, göndermeye hazır olduğunuzda, gizli alanın içeriğini değiştirilmiş olandan yeniden doldurursunuz. <select> . Sonra, elbette, sunucuya tekrar bölmeniz ve öğelerinizle bir şeyler yapmanız gerekiyor, çünkü seçiminiz artık sunucuya geri döndüğü için boş.

Sonuçta ben gerçekten tavsiye etmem oldukça hantal bir çözüm, ama gerçekten bir listBox istemci tarafı değişiklikler yapmak zorunda kalırsanız, işe yarıyor. Bununla birlikte, bu rotaya gitmeden önce bir updatePanel'e bakmanızı gerçekten tavsiye ederim.


3
c, seçili öğeleri gizli bir alanda tutmanıza gerek yoktur; runat = "server" seçim kutusunu yaparsanız, yayınlanan değeri Request.Form [ selectid .UnqiueID] ' den kaydedebilirsiniz. Ve birden fazla seçilirse tarayıcı, değerleri csv olarak gönderir. Sunucunun bilmediği istemcideki itrmlistini değiştirdiğinizden, denetimin öğeleri ve selectedindex özelliklerinin sunucuda yanlış olacağını unutmayın.
Michael

Michael, işe yaradı. "multiple = true" eklediğiniz sürece yalnızca 1 değer verir. Teşekkürler
Sameer Alibhai

1
Yeni satır karakterleri içeren bir açılır liste için de aynı sorun vardı. Bir seçime geçmek mükemmel çalıştı. Teşekkürler!
thchaver

<select>Sorunu çözen düz eski kullandım . Updatepanel'in neden veri tarafı ajax veri yüküne kıyasla veri yüklemek için çok zaman aldığını söyleyebilir misiniz?
Pranesh Janarthanan

17

EnableEventValidation açık olan bir web sitesinde bir Tekrarlayıcı denetimi olan bir web sayfası vardı çünkü bir Tekrarlayıcı ile aynı sorunu vardı. İyi değildi. Geri gönderme ile ilgili geçersiz istisnalar alıyordum.

Benim için işe yarayan Tekrarlayıcı için EnableViewState = "false" olarak ayarlamaktı. Avantajları, web sitesi veya web sayfası için etkinlik doğrulamasını kapatmak kadar basit, ancak kullanımının daha basit olmasıdır, ancak kapsam, her ikisi için de etkinlik doğrulamasını kapatmaktan çok daha azdır.


3
Eski bir web kontrolüyle ilgili bu problemi yaşadım. Web platformumuz / CMS (sitecore), etkinlik doğrulamayı etkinleştiren büyük bir güncelleme aldı (daha önce kapatılmıştı! Tekrarlayıcı kontrolü, görüntüleri bir web galerisinde (yeniden düzenlemek için düğmelerle) gösteriyordu ve bu düğmelerin geri gönderilmesinde istisna oluşacaktı. Ben önerildiği gibi EnableViewState = "false" kullanarak tekrarlayıcılarda görünüm durumunu devre dışı bıraktım ve hey presto çalıştı. Diğerlerinin de bulduğu gibi Render () geçersiz kılınması ve ClientScriptManager.RegisterForEventValidation () kullanılması benim için çalışmadı. TEŞEKKÜR EDERİM!
xan

@Xan gibi ben de Sitecore kullanıyorum ve tam da ihtiyacım olan şey bu.
wilsjd

Bu da benim için çalıştı. AJAX Güncelleme paneli de işe yarayacaktı, ancak davada ihtiyacım olmadığı için şişirilmişti, bu yüzden Umar Farooq Khawaja.
Bryan

17

Yukarıdakilerin hiçbiri benim için çalışmadı. Daha fazla kazma sonrasında, sayfaya neden olan 2 formun göz ardı edildiğini fark ettim.

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

Son zamanlarda ASP.NET'in, iframe belgesinin kendisinde yuvalanmış bir çerçeve içinde form etiketi içeren bir form etiketi içindeki iframe'leri düşünmeye başladığını unutmayın. Bu hatayı önlemek için iframe'i form etiketinin dışına taşımak zorunda kaldım.


12

İstemcide JavaScript kullanarak bir ListBox değiştirirken aynı sorunu vardı. Sayfa oluşturulduğunda orada olmayan istemciden ListBox'a yeni öğeler eklediğinizde oluşur.

Bulduğum düzeltme, olay doğrulama sistemini istemciden eklenebilecek tüm olası geçerli öğeler hakkında bilgilendirmektir. Bunu, Page.Render'ı geçersiz kılarak ve JavaScript'inizin liste kutusuna ekleyebileceği her değer için Page.ClientScript.RegisterForEventValidation öğesini çağırarak yaparsınız:

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

Liste kutusu için potansiyel olarak geçerli çok sayıda değeriniz varsa, bu bir tür acı olabilir. Benim durumumda, tüm olası değerleri olan ve başlangıçta boş olan ancak kullanıcı bir düğmeyi tıklattığında JavaScript'teki ilk değerlerin bir alt kümesiyle doldurulan iki ListBox arasında öğeler taşıyordum. Bu durumda, sadece ilk ListBox'taki öğeleri tekrarlamanız ve her birini ikinci liste kutusuna kaydetmeniz gerekir:

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

9

Burada belirtilmeyen diğer bir yol da ListBox alt sınıfını oluşturmaktır

Yani.

public class ListBoxNoEventValidation : ListBox 
{
}

ClientEventValidation, alt sınıfı sınıflandırırsanız System.Web.UI.SupportsEventValidation özniteliğini kapatır, açıkça geri eklemediğiniz sürece hiçbir zaman doğrulama yordamını çağırmaz. Bu herhangi bir kontrol ile çalışır ve kontrol bazında bir kontrol üzerinde "devre dışı bırakmak" buldum tek yolu (yani, sayfa düzeyinde değil).


2
Güzel burada tarif .
Pavel Hodek

1
Bence bunu ele almanın en iyi yolu bunu yapmaktır. Bunu sayfa düzeyinde değil kontrol düzeyinde düzeltmeliyiz ve ilgili tüm kontrollerin güvenliğini + 1'lemeliyiz ve bu bağlantı için @PavelHodek için teşekkürler.
James Poulose

Ne yazık ki, bunu yaparsanız, istemciye eklenen liste öğelerinin, sayfa geri gönderildiğinde öğe seçildiyse tanınmayacağı anlaşılıyor.
Jonathan Wood

9

.aspx sayfanızda böyle bir şey denersiniz

Ekle

EnableEventValidation = "false"

herhangi bir soru sormaktan çekinmeyin!


Hata görmeyi durdurmak için çerçeve tarafından yerleşik doğrulama teklifini devre dışı bırakmanın bu durumda en uygun çözüm olup olmadığını tartışacağım.
Jviaches

8

DropdownList'i istemci tarafı komut dosyası aracılığıyla doldurursanız, formu sunucuya geri göndermeden önce listeyi temizleyin; ASP.NET şikayet etmeyecek ve güvenlik hala açık olacaktır.

Ve DDL'den seçilen verileri almak için, değeri gizli bir Girişte veya Style = "display: none;" içeren bir metin kutusunda toplamak için DDL'ye bir "OnChange" olayı ekleyebilirsiniz.


+1 Kolay uygulanır. En temiz değil, ama yeterince kolay olabilir.
nutsch

7

3: Izgara sütunundaki düğme türümü "PushButton" dan "LinkButton" olarak değiştirdim. İşe yaradı! ("ButtonType =" LinkButton ") Düğmenizi diğer durumlarda" LinkButton "gibi diğer denetimlere değiştirebilirseniz, düzgün çalışacağını düşünüyorum.

Keşke sana oy verebilseydim, Amir (ne yazık ki benim temsilcim çok düşük.) Sadece bu problemi yaşıyordum ve bunu değiştirmek benim görüşümde bir şampiyon gibi çalıştı. Biraz bir kenara, geçerli kod olduğunu düşünüyorum: ButtonType = "Bağlantı"

Bunun nedeni, 'düzenle'yi tıkladığınızda düzenlemenizin' güncelleme 've' iptal 'olarak değişmesi ve ardından gönderildiğinde' düzenle 'olarak değişmesidir. Ve bu vites değiştirme kontrolleri .net'i tedirgin ediyor.


Bu sorunun en önemli noktası asp.net olay doğrulama modelidir ve "sayfa" öğesinin bir gönderi yaptığınızda noktada değiştirilip değiştirilmeyeceğidir. Ne demek istiyorsun '..... Ve bu vites değiştirme kontrolleri .net'i tedirgin ediyor' ??
Julius A

7

(1) EnableEventValidation = "false" ................... Benim için çalışmıyor.

(2) ClientScript.RegisterForEventValidation .... Benim için çalışmıyor.

Çözüm 1:

GridView'da Button / ImageButton öğesini LinkButton olarak değiştirin. İşe yarıyor. (Ama ImageButton'u seviyorum)

Araştırma: Button / ImageButton ve LinkButton geri gönderme için farklı yöntemler kullanıyor

Orijinal makale:

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

Çözüm 2:

OnInit () alanına Button / ImageButton için benzersiz bir kimlik ayarlamak üzere kodu böyle bir şey girin:

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();           
  }
}

Orijinal makale:

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


6

Yuvalanmış bir ızgara görünümü uygulandı ve aynı sorunla karşı karşıya kaldım.Bunun gibi görüntü düğmesi yerine LinkButton kullandık:

önce böyle bir sütun vardı:

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

Bu şekilde değiştirdim.

<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

Benzer bir sorun vardı, ama ASP.Net 1.1 kullanmıyordum veya javascript aracılığıyla bir denetimi güncelleştirmiyordum. Benim sorunum sadece Firefox'ta oldu, IE'de değil (!).

PreRender olayında bir DropDownList'e şu şekilde seçenekler ekledim:

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);

Benim "HF" (gizli alan) yeni satır ile ayrılmış seçenekleri vardı, şöyle:

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

Sorun, HTML sayfasının DropDown'ı temsil eden "select" seçeneklerinde kırılmış olmasıydı (yani yeni satırlar vardı).

Bu yüzden bir satır ekleyerek sorunumu çözdüm:

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);

Umarım bu birine yardım eder.


4

Eğer değiştirirseniz UseSubmitBehavior="True" için UseSubmitBehavior="False"sorununuza çözülecektir

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

Bu benim için işe yaramadı. Ben bir görüntü butonu kullanıyorum ve bir tekrarlayıcı bir tabloda, bu yüzden tam olarak aynı durum değil. Tekrarlayıcının görüş bildirimini devre dışı bırakmak benim için çalıştı.
Bryan

3

Ben aynı sorunu yaşadım, ne yaptım:

Sadece bir koşul ekledi if(!IsPostBack)ve iyi çalışıyor :)



2

Bu durumda, kılavuzun RowDataBound öğesindeki düğmeye id ekleyin. Sorununuzu çözecektir.


2

Bu sorun için basit bir çözüm , sayfa yüklemenizde IsPostBack denetimini kullanmaktır . Bu sorunu çözecektir.


2

Ajax UpdatePanel bunu yapıyor ve sanırım bu en kolay yol, Ajax postback yükünü görmezden geliyor .


2

Bunun çok eski bir yazı olduğunu biliyorum. Başvurunuzu yaptığınızı varsayarsak, işte benim için çalışan bir fikir:

  1. ICallbackEventHandler'ı sayfanıza uygulayın
  2. Sunucu tarafı kodunuzu aramak için ClientScriptManager.GetCallbackEventReference öğesini çağırın
  3. Hata iletisinin belirttiği gibi, ClientScriptManager'ı arayabilirsiniz.RegisterForEventValidation

Tam kontrole ihtiyacınız yoksa, bunu sizin için yapacak bir güncelleme paneli kullanabilirsiniz.


2

Normal ASPX sayfalarımızı İçerik sayfalarına dönüştürürken de aynı sorunla karşılaştık.

Bu soruna sahip sayfanın </form>İçerik bölümlerinden birinde bir etiketi vardı , bu nedenle çalışma zamanında bu soruna neden olan iki form bitiş etiketi oluşturuldu. Fazladan form sonu etiketinin sayfadan kaldırılması bu sorunu çözdü.


Teşekkürler, kodumda fazladan <form>alanım olduğu ortaya çıktı .
Eric Kigathi

2

Gridview kullanıyorsanız ve gridview içinde!

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

1

Dört dakika önce aynı hatayı aldım. Sonra senin gibi yarım saat boyunca araştırma yaptım. Tüm forumlarda genellikle "sayfa ekle enableEvent .. = false veya true" diyorlar. Önerilen herhangi bir çözüm, bulana kadar sorunlarımı çözmedi. Sorun maalesef bir ASP.NET düğmesidir. İki saniye önce kaldırdım. Ben "imagebutton" ile değiştirmeye çalıştım, ama aynı kabul edilemez çünkü aynı zamanda kabul edilemezdi.

Sonunda yerini aldım LinkButton. çalışıyor gibi görünüyor!


1

Datalist kullanıyordum ve basma düğmem için de aynı hatayı alıyordum. Sadece kontrollerimi kontrol etmek ve doldurmak için IsPostBack kullanıyorum ve sorun çözüldü! Harika!!!


1

Benim için işe yarayan şu kodu page_load'dan page_prerender'a taşımak:

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

En iyi seçenek gizli alanı kullanmak ve etkinlik doğrulamayı devre dışı bırakmamak, ayrıca her liste kutusunu, açılır listeyi runat sunucusu özniteliğiyle seçmek için değiştirmek


Asp kontrolünden normal <select id = "director" runat = "server"> sürümüne geçmek harika çalıştı. Kullanarak arkasındaki koddaki değerine erişebildim: ex .: string directorId = Request.Form [director.ID]
Baxter

1

Ajax güncelleme panelini kullanıyorsanız. <Triggers>Etiket ekleyin ve içinde Düğme ya da postBack kullanarak kontrol tetikleyin<asp:PostBackTrigger .../>


1

Doldurulabilecek verileri önceden biliyorsanız, bu sorunu çözmek için ClientScriptManager'ı kullanabilirsiniz. Dinamik bir önceki kullanıcı seçiminde javascript kullanarak bir açılır kutu doldururken bu sorun vardı.

Burada render yöntemini (VB ve C #) geçersiz kılmak ve ddCar açılır listesi için potansiyel bir değer bildirmek için bazı örnek kodlar verilmiştir.

VB'de:

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

veya C # 'da küçük bir değişiklik olabilir:

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

Yeni başlayanlar için: Bu, dosyanın arkasındaki koda (.vb veya .cs) girmeli veya aspx dosyasında kullanılıyorsa <script>etiketleri sarabilirsiniz .


1

Bunu almamın nedeni buydu:

Bir ASP: ListBox vardı. Başlangıçta gizlendi. İstemci tarafında AJAX ile seçenekleri dolduracaktı. Kullanıcı bir seçenek seçti. Sonra Gönder düğmesini tıkladığınızda, Sunucu ListBox hakkında tüm komik olacak, çünkü herhangi bir seçeneği olduğunu hatırlamıyordu.

Yaptığım şey, formu sunucuya geri göndermeden önce tüm liste seçeneklerini temizlediğimden emin olmak. Bu şekilde, sunucu istemciye boş gittiğinden ve geri döndüğünden sunucu şikayet etmedi.

Sıralama !!!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.