Как отобразить данные внутри выпадающего списка внутри, используя статический метод в коде для заполнения выпадающего списка

#javascript #c# #webforms #code-behind

#javascript #c# #webforms #code-behind

Вопрос:

идея состоит в том, чтобы заполнить выпадающий список информацией из базы данных, код был отлажен, и информация, если она сохранена в выпадающем списке, проблема в том, что в ней вы не можете увидеть никаких советов.

Я не буду использовать панель обновления.

Функция javascript вызывает метод в коде позади, единственная проблема в том, что я не вижу информацию

  <asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>
        <div class="grid3">
        <asp:Label runat="server" Text="Provincia"></asp:Label>
       <asp:DropDownList ID="droplistProvincia" ClientIDMode="Static"  AutoPostBack="false"  OnSelectedIndexChanged="droplistProvincia_SelectedIndexChanged" onclick="" Width="100%" runat="server" Height="30px">
        <asp:ListItem Text="Seleccione"></asp:ListItem>
        </asp:DropDownList>
       <asp:Label runat="server" Text="Cantón"></asp:Label>
       <asp:DropDownList ID="droplistCanton" CssClass="item15"  AutoPostBack="true" OnSelectedIndexChanged="droplistCanton_SelectedIndexChanged" Width="100%" runat="server" Height="30px">
       <asp:ListItem Text="Seleccione"></asp:ListItem>
       </asp:DropDownList>
       <asp:Label runat="server" CssClass="item16" Text="Distrito"></asp:Label>
       <asp:DropDownList ID="droplistDistrito" CssClass="item17"  runat="server" Height="30px">
       <asp:ListItem Text="Seleccione"></asp:ListItem>
      </asp:DropDownList>
       <div runat="server" id="checkProvincia"  class="mensaje req6 diseñoReqObli">
         <div runat="server" id="mensaje6" class="iconoMensaje">
        <i class="fa fa-exclamation-circle fa-2x" aria-hidden="true" ></i>
      </div>
      <div runat="server" id="txtMensaje6" style="margin-top:5px;"></div>
      </div>
      <div runat="server" id="checkCanton"  class="mensaje req7 diseñoReqObli">
         <div runat="server" id="mensaje7" class="iconoMensaje">
        <i class="fa fa-exclamation-circle fa-2x" aria-hidden="true" ></i>
      </div>
      <div runat="server" id="txtMensaje7" style="margin-top:5px;"></div>
      </div>
        <div runat="server" id="checkDistrito"  class="mensaje req8 diseñoReqObli">
         <div runat="server" id="mensaje" class="iconoMensaje">
        <i class="fa fa-exclamation-circle fa-2x" aria-hidden="true" ></i>
      </div>
      <div runat="server" id="txtMensaje8" style="margin-top:5px;"></div>
      </div>
        
      </div>
      </ContentTemplate>
     </asp:UpdatePanel>


  

Скрипт

  provincia.addEventListener('change', (e) => {
        e.preventDefault();
        PageMethods.Provincia(provincia.value);
        console.log(provincia.value);
    })
  

код позади

    [System.Web.Services.WebMethod()]
        [System.Web.Script.Services.ScriptMethod()]
        public static void Provincia(string dato)
        {
            MessageBox.Show(dato);
            DropDownList dropCanton = new DropDownList();
            dropCanton = HttpContext.Current.Session["dropCanton"] as DropDownList;

            if (dato != "Seleccione")
            {
                int idProvincia = int.Parse(dato);
                _servicio2 = _servicio2 ?? new Servicio<Canton>();
                dropCanton.DataTextField = "nom_Canton";
                dropCanton.DataValueField = "cod_Canton";
                dropCanton.DataSource = _servicio2.TraerTodoEspecificoPor(new Query<Canton> { Where = x => x.cod_Provincia == idProvincia });
                dropCanton.DataBind();
                dropCanton.Items.Insert(0, "Seleccione");
                dropCanton.SelectedIndex = 0;
               
            }
        }
  

Page_load

   protected void Page_Load(object sender, EventArgs e)
        {
            Session["dropCanton"] = this.droplistCanton;

        }
  

Ответ №1:

Распространенное недоразумение с методами страницы: вы не можете получить доступ к элементам управления на странице из статического веб-метода / метода страницы. Вы должны вернуть данные в javascript, который вызвал метод, затем обновить свой элемент управления (выпадающий список) из метода javascript.

Поскольку метод статический, это один и тот же метод на каждой странице. Если страница открыта у 4 пользователей на вашем сайте, и метод говорит «обновить этот элемент управления», какой выпадающий список на какой странице следует обновить? Это невозможно знать. Вот почему вы должны отправить данные обратно скрипту на странице, которая его вызвала.