如何更新通过jQuery AJAX调用添加列表项的ASP Dropdown:错误无效的回发或回调

时间:2016-03-29 23:39:35

标签: javascript c# jquery asp.net ajax

我有一个简单的问题,我很复杂。我的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因此我唯一的选择是使用我完全不熟悉的更新面板。我试了一下,但它没有工作,自从过去3个小时后,我被困住了,无法前进。

我的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#网络服务看起来像

[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:我尝试添加网络配置。我摆脱了错误,但在提交

后我无法在控件中获取所选值
<system.web>
   <pages enableEventValidation="false"/>
</system.web>

1 个答案:

答案 0 :(得分:0)

Webforms倾向于让你按照自己的方式做事。您可以尝试将新值发布到服务器,然后将选项添加到服务器代码的下拉列表中,而不是将选项添加到客户端上的控件。 (即使您从客户端添加它,您可能希望在收到它后添加新值服务器端。否则它将不会作为列表中的项目保留。它将消失。)

另外,你如何阅读下拉列表的价值? ASP.NET可能无法将其识别为服务器控件中的选项,但在提交表单时仍会发布它。您可以直接从Request.Form["YourDropDownClientId"].

阅读