none
Method error 500 en Cascading DropDown

    Question

  • Hola a todos los del foro: Saben, ando sumergiendome en el mundo AJAX, puesto que lo he encontrado interesante. Pero tengo el siguiente problema con el control CascadingDropDown y me gustaria saber si uds. me podrian ayudar.

     

    Es simple, uso la DB NorthWind y lo que prentedo es listar las Categorias y eligiendo una, sus productos.

     

    La pagina aspx es la sigueinte:

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableEventValidation="false" %>
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
     <form id="form1" runat="server">
      <aspTongue TiedcriptManager ID="ScriptManager1" runat="server" />
      <div style="text-align: center">   
       <asp:UpdatePanel ID="UpdatePanel1" runat="server">
       <ContentTemplate>
       <table cellpadding="0" cellspacing="0">
        <tr>
         <td style="vertical-align: middle; width: 64px; text-align: left">Categoria &nbsp; &nbsp; &nbsp;&nbsp;
         </td>
         <td style="width: 227px">
          <aspBig SmileropDownList ID="cboCategories" runat="server" Width="240px" OnSelectedIndexChanged="cboCategories_SelectedIndexChanged">
          </aspBig SmileropDownList>
         </td>
        </tr>
        <tr>
         <td style="vertical-align: middle; width: 64px; text-align: left">Productos &nbsp; &nbsp; &nbsp;&nbsp;
         </td>
         <td style="width: 227px">
          <aspBig SmileropDownList ID="cboProducts" runat="server" Width="240px">
          </aspBig SmileropDownList>
         </td>
        </tr>    
       </table>
        <cc1:CascadingDropDown
         ID="CascadingDropDown1"
         runat="server"
         Category="Category"
         PromptText="Seleccione una categoría"
         LoadingText="Cargando categorías"
         TargetControlID="cboCategories"
         ServiceMethod="GetCategories"
         ServicePath="CategoriesProducts.asmx">
        </cc1:CascadingDropDown>
        <cc1:CascadingDropDown
         ID="CascadingDropDown2"
         runat="server"
         Category="Products"
         PromptText="Seleccione un producto"
         LoadingText="Cargando productos..."
         TargetControlID="cboProducts"
         ParentControlID="cboCategories"
         ServiceMethod="GetProducts"
         ServicePath="CategoriesProducts.asmx">
        </cc1:CascadingDropDown>
       </ContentTemplate>
       </asp:UpdatePanel>   
      </div>
     </form>
    </body>
    </html>

    y el codigo del sericio web es el sgte.:

     

    using System;
    using System.Web;
    using System.Collections;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.Web.Script.Services;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Data;
    using System.Data.SqlClient;
    using AjaxControlToolkit;

    /// <summary>
    /// Servucio web que nos proporcionara el listado de Catagorias y sus productos
    /// </summary>

    [System.Web.Script.Services.ScriptService()]
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class CategoriesProducts : System.Web.Services.WebService {

        public CategoriesProducts () {
            //Eliminar la marca de comentario de la línea siguiente si utiliza los componentes diseñados
            //InitializeComponent();
        }
       
     [WebMethod]
     [System.Web.Script.Services.ScriptMethod()]
     public CascadingDropDownNameValue[] GetCategories(string knowCategoryValues, string Category)
     {
      SqlConnection cnn;
      SqlCommand cmd;
      SqlDataReader dtr;

      try
      {
       cnn=new SqlConnection("Data Source=ARBAWKS081; User Id=sa; Password=sa; Initial Catalog=NorthWind");
       cnn.Open();

       cmd = new SqlCommand("Select CategoryId, CategoryName From Categories");
       cmd.Connection=cnn;

       dtr=cmd.ExecuteReader(CommandBehavior.CloseConnection);

       List<CascadingDropDownNameValue> Categorias =
         new List<CascadingDropDownNameValue>();

       if (dtr.Read() == true)
       {
        while (dtr.Read() == true)
        {
         Int32 CatId = (Int32)dtr.GetInt32(0);
         string CatName = (string)dtr.GetString(1);

         Categorias.Add(new CascadingDropDownNameValue(CatName, CatId.ToString()));
        }
        return Categorias.ToArray();
       }
       else
       {
        return null;
       }
      }
      catch(Exception ex)
      {
       string msg = "";
       msg = ex.Message;

       return null;
      }
     }

     [WebMethod]
     [System.Web.Script.Services.ScriptMethod()]
     public CascadingDropDownNameValue[] GetProducts(string knowCategoryValues, string Category)
     {
      SqlConnection cnn;
      SqlCommand cmd;
      SqlDataReader dtr;

      try
      {
       StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knowCategoryValues);
       Int32 CatId;

       if (!kv.ContainsKey("Category") || Int32.TryParse(kv["Category"],out CatId))
       {
         return null;
       }

       cnn=new SqlConnection("Data Source=ARBAWKS081; User Id=sa; Password=sa; Initial Catalog=NorthWind");
       cnn.Open();

       cmd = new SqlCommand("Select ProductId, ProductName From Products Where CategoryId = " + CatId.ToString() );
       cmd.Connection=cnn;

       dtr=cmd.ExecuteReader(CommandBehavior.CloseConnection);

       List<CascadingDropDownNameValue> Products =
         new List<CascadingDropDownNameValue>();

       if (dtr.Read() == true)
       {
        while (dtr.Read() == true)
        {
         Int32 ProdId = (Int32)dtr.GetInt32(0);
         string ProdName = (string)dtr.GetString(1);

         Products.Add(new CascadingDropDownNameValue(ProdName, ProdId.ToString()));
        }

        return Products.ToArray();
       }
       else
       {
        return null;
       }
      }
      catch(Exception ex)
      {
       string msg = "";
       msg = ex.Message;
       return null;
      }
     }
    }

     

    Espero me puedan decir en donde estoy comiento el error o que es lo que me falta para que la aplicaicion corra.

     

    Desde ya muchas gracias a todos. Saludos

    Monday, June 09, 2008 4:06 AM

All replies

  • Hola Jorge, ¿conseguiste solucionar esto? es que yo tengo el mismo problema y no doy con la solución, ¿me podrías ayudar?

     

    Saludos.

     

    Thursday, February 10, 2011 2:45 PM
  • Hola, quisiera saber si pudieron resolver el error que a mi tambien me da y no lo he podido solucionar!!
    Monday, September 05, 2011 3:57 AM
  • Hola,

     

    Tu webservice esta en la raiz del sitio, porque sino deberias colocarle la ruta relativa. Por ejemplo

    ServicePath="~/WebService/DataService.asmx"

    También, como el codigo esta un poco extenso, te lo he dejado asi

    [WebMethod]
            public CascadingDropDownNameValue[] GetCategories(string knownCategoryValues, string category)
            {
                using (SqlConnection connection = new SqlConnection("Data Source=ARBAWKS081; User Id=sa; Password=sa; Initial Catalog=NorthWind")
                {
                    using (SqlCommand command = new SqlCommand("Select CategoryId, CategoryName From Categories", connection))
                    {
                        command.CommandType = CommandType.Text;
                        connection.Open();

                        List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();

                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                int CatId = (int)reader["NombreColumna"];
                                string CatName = (string)reader["NombreColumna"];
                                values.Add(new CascadingDropDownNameValueCatName, Convert.ToString(CatId)));
                            }
                        }
                        return values.ToArray();
                    }
                }
            }



         [WebMethod]
            public CascadingDropDownNameValue[] GetProducts(string knownCategoryValues, string category)
            {
              
                StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
                int CatId;

                if (!kv.ContainsKey("Category") ||
                    !Int32.TryParse(kv["Category"], out CatId))
                {
                    return null;
                }

                using (SqlConnection connection = new SqlConnection("Data Source=ARBAWKS081; User Id=sa; Password=sa; Initial Catalog=NorthWind"))
                {
                    using (SqlCommand command = new SqlCommand("Select ProductId, ProductName From Products Where CategoryId= @mcategory", connection))
                    {
                        command.CommandType = CommandType.Text;
                        command.Parameters.Add(new SqlParameter("@mcategort", CatId));
                        connection.Open();

                        List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                int ProdId  = (int)reader["NombreColumna"];
                                string ProdName  = (string)reader["NombreColumna"];
                                values.Add(new CascadingDropDownNameValueProdName, Convert.ToString(ProdId)));
                            }
                        }
                        return values.ToArray();
                    }
                }
            }

     

    Por ultimo, tambien verifica que la cadena de conexion sea la correcta y mira de si la forma en que te lo he colocado funciona. Solo cambia el NombreColumna por el nombre real

     

    Saludos,

     



    Jason Ulloa
    Mi Blog San José, Costa Rica
    Monday, September 05, 2011 1:27 PM