2012-03-23 5 views
0

Was kann ich tun, damit die Dropdown-Liste erkennt, dass sie ein ausgewähltes Objekt hat? Also habe ich die JQUERY AJAX JSON, um eine Server-Steuerelement Dropdown-Liste zu füllen. Der Benutzer wählt eine Option in der oben genannten Liste. Dann klickt auf eine ServerControl-Taste. Ich bekomme ein "ungültiges Postback oder Callback-Argument." Nachdem ich eine Stunde lang versucht habe, "die ClientScriptManager.RegisterForEventValidation-Methode zu verwenden, um die Postback- oder Callback-Daten für die Validierung zu registrieren", gebe ich auf und setze das EnableEventValidation = "false" im Page-Tag. Jetzt kein Fehler mehr, aber wenn ich den Dropdown-Liste.selected Wert überprüfen, ist es leer. Was kann ich tun, damit die Dropdown-Liste erkennt, dass ein ausgewähltes Objekt vorhanden ist?Jquery Ajax ServerControl DropDownlist ausgewählter Artikel nach Ajax-Aufruf

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Ajax.aspx.cs" Inherits="something" EnableEventValidation="false" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title></title> 

    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript" language="javascript"> 
      $().ready(function() { 
        $("#ddlCountry1").change(function() { 
         $.ajax({ 
           type: "POST", 
           url: "Ajax.aspx/PopulateStates", 
           data: "{countryCode:" + "'" + bozo + "'" + "}", 
           contentType: "application/json; charset=utf-8", 
           dataType: "json", 
           success: function (msg) { 
             $("#ddlState").get(0).options.length = 0; 
             $("#ddlState").get(0).options[0] = new Option("Select State", "-1"); 

             $.each(msg.d, function (value, item) { 
               $("#ddlState").get(0).options[$("#ddlState").get(0).options.length] = new Option(item.Display, item.Value); 
             }); 
             var itemCount = $("#ddlState").children().length; 
             if (itemCount < 2) { 
               $("#ddlState").hide(); 
             } 
             else 
             { $("#ddlState").show(); }; 
           }, 
           error: function() { 
             alert("Failed to load states"); 
           } 
         }); 
        }); 
      }); 
    </script> 

    </head> 

und die Form

<body> 
     <form id="form1" runat="server"> 
      <div> 
       <table> 
        <tr><th>country</th><td> 
          <asp:DropDownList ID="ddlCountry1" runat="server" ClientIDMode="Static"> 
          </asp:DropDownList> 
        </td></tr> 
       <tr><th>state</th><td> 
         <asp:DropDownList ID="ddlState" runat="server" ClientIDMode="Static"> 
          </asp:DropDownList> 
        </td></tr> 
      </table> 
     </div> 
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 
    </form> 
</body> 

und der Code hinter

protected void Page_Load(object sender, EventArgs e) 
     { 
      BindCountryDropDown(); 
     } 

     private void BindCountryDropDown() 
     { 
      ddlCountry1.Items.Add(new ListItem("country1", "country1")); 
      ddlCountry1.Items.Add(new ListItem("country2", "country2")); 
      ddlCountry1.DataSource = managers.profileManager.GetCountries(); 
      ddlCountry1.DataTextField = "CountryName"; 
      ddlCountry1.DataValueField = "CountryAbbr"; 
      ddlCountry1.DataBind(); 
     } 

     [WebMethod] 
     public static ArrayList PopulateStates(string countryCode) 
     { 
      var p = managers.profileManager.GetStates(countryCode); 
      ArrayList myStates = new ArrayList(p.ToArray()); 
      return myStates; 
     } 


     protected void Button1_Click(object sender, EventArgs e) 
     { 
      var dd = ddlState.SelectedValue; //is empty 
     } 

Antwort

1

Die ASP.NET-ID ist nicht die Client-ID. Es ist die interne ID für ein Postback. Sie können entweder die generierte ID anzeigen, wenn sie zum Browser gelangt, oder Sie können das Attribut clientId der Dropdown-Liste sehen.

+0

Also muss ich es über Javascript tun? – user1069733

Verwandte Themen