#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 пользователей на вашем сайте, и метод говорит «обновить этот элемент управления», какой выпадающий список на какой странице следует обновить? Это невозможно знать. Вот почему вы должны отправить данные обратно скрипту на странице, которая его вызвала.