簡體   English   中英

如何更新由jQuery AJAX調用添加其列表項的ASP Dropdown:錯誤無效的回發或回調

[英]How do I update ASP Dropdown whose list item are added by jQuery AJAX call : Error Invalid postback or callback

我有一個簡單的問題,使我感到復雜。 我的Web應用程序有一個ASP Dropdown,我希望從數據庫中填充其值。 因此,我使用jquery和Ajax執行並將列表項動態添加到成功完成的下拉列表中。 但是,一旦我選擇一個值並點擊“提交”按鈕,我就會得到

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.

我意識到問題在於,由於服務器端不知道這些新添加的值,因此會引發此錯誤。 我絕對需要ASP下拉列表,並且不能使用Select,因此我唯一的選擇是使用我完全不熟悉的update Panel。 我試了一下,但是沒用,因為最近三個小時,我被卡住了,無法前進。

我的AJAX通話看起來像

$.ajax({
    type: "POST",
    url: "salesQuote.aspx/getLabelAndValue",
    data: "{fieldName: \"tier\"}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
         console.log("karan");
         $.each(msg.d, function () {
               $("#tier").append($("<option></option>").val(this['Value']).html(this['Text']));
         });
    },
    error: function () {                   
           alert("Failed to load names");
    }
});

C#Web服務看起來像

[WebMethod]
public static ArrayList getLabelAndValue(string fieldName)
{
    try
    {
        //.....database connection...
        ArrayList temp = new ArrayList();
        while (dr.Read())
        {
            temp.Add(new ListItem(  (string)dr.GetValue(0), (string)dr.GetValue(1)) );
        }
        return temp;
        ....
}

帶有更新面板的ASP下拉列表如下所示

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
     <ContentTemplate>
           <asp:DropDownList  class="form-control" ID="tier" runat="server" AutoPostBack="true" OnSelectedIndexChanged="tierAccessChange" >
           </asp:DropDownList>
     </ContentTemplate>
     <triggers>
         <asp:asyncpostbacktrigger controlid="tier" eventname="SelectedIndexChanged" />
     </triggers>
</asp:UpdatePanel>

我不知道下一步該怎么做,或者我所做的是正確的。 在點擊下拉菜單中的“提交”按鈕后,如何將選定的值指向正確的方向。

編輯1:我嘗試添加Web配置。 我擺脫了錯誤,但提交后無法在控件中獲得選定的值

<system.web>
   <pages enableEventValidation="false"/>
</system.web>

Webform傾向於使您以自己的方式行事。 您可以嘗試將新值發布到服務器,然后在服務器代碼的下拉列表中添加選項,而不是將選項添加到客戶端的控件上。 (即使從客戶端添加它,您也可能會希望在收到新值后在服務器端添加它。否則,它將不會作為持久項保留在列表中。它將消失。)

另外,您如何閱讀下拉菜單的值? ASP.NET可能無法將其識別為服務器控件中的一個選項,但在提交表單時仍會被發布。 您可以直接從Request.Form["YourDropDownClientId"].讀取它Request.Form["YourDropDownClientId"].

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM