Как сделать так, чтобы ASP.NET TextBox запускал событие onTextChanged в AJAX UpdatePanel?
Я пытаюсь заставить textBox запускать событие onTextChanged при каждом нажатии клавиши, а не только при нажатии только когда он теряет фокус. Я думал, что добавление AsyncPostBackTrigger сделает это, но он все еще не работает. Возможно ли то, что я пытаюсь сделать? Код ниже:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Items.aspx.cs" MasterPageFile="~/MMPAdmin.Master" Inherits="MMPAdmin.Items" %>
<asp:Content ID="content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
<asp:ScriptManager ID="sm_Main" runat="server" />
<div style="left:10px;position:relative;width:100%;overflow:hidden">
<asp:UpdatePanel ID="up_SearchText" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="tb_Search" EventName="TextChanged" />
</Triggers>
<ContentTemplate>
<div style="position:relative;float:left">
<b style="font-size:xx-large">Items</b>(<a href="Item.aspx">Add New</a>)
</div>
<div style="right:25px;position:absolute; top:30px">
Search: <asp:TextBox ID="tb_Search" runat="server" Width="200" OnTextChanged="UpdateGrid" AutoPostBack="true" />
</div>
<br />
<div>
<asp:GridView runat="server" AutoGenerateColumns="true" ID="gv_Items" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</asp:Content>
4 ответа
- Вам нужно позвонить
_postback()
функция для вашего контроля текстового поля, когдаonkeyup
поднят с использованием JavaScript. - Однако, поскольку ваше текстовое поле находится внутри панели обновлений, оно будет перерисовываться каждый раз, когда пользователь нажимает клавишу, в результате чего курсор теряет фокус.
- Это не будет использоваться, если вы не получите текстовое поле из панели обновления. Это может сработать для вас, так как панели обновления имеют тенденцию быть немного медленными, у вас все еще могут быть проблемы с юзабилити. - Я бы предложил использовать компонент автозаполнения.
PS: есть один в наборе средств управления asp.net, или вы можете использовать плагин автозаполнения jquery, который я нашел немного лучше.
AutoPostBack="true" OnTextChanged="TextBox1_TextChanged"
Оба события необходимы для запуска события изменения текста.
Не нужно использовать элементы управления AJAX для проверки доступности. Использовать его не обязательно. Элементы управления AJAX. Мы можем использовать следующий код.
<iframe>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" ontextchanged="TextBox1_TextChanged"></asp:TextBox>
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
RequiredFieldValidator1.ErrorMessage = "";
Label1.Text = "";
string name = TextBox1.Text.ToString();
string constr = "data Source=MURALY-PC\\SQLEXPRESS; database=Online; Integrated Security=SSPI";
SqlConnection con = new SqlConnection(constr);
con.Open();
string query = "select UserName from User_tab where UserName='" + name + "'";
SqlCommand cmd = new SqlCommand(query, con);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
Label1.Text = "UserName Already Exists";
}
else
{
Label1.Text = "";
Label1.Text = "UserName Available";
}
con.Close();
}
</iframe>
Все, что делает AsyncPostBackTrigger - проверяет, обновляется ли только та часть страницы, когда событие вызывается, и не изменяется при запуске события.
Я думаю, что можно делать то, что вы хотите, но вам нужно написать некоторый код javascript, чтобы вручную запустить событие... и я даже не хочу думать о том, чтобы заставить это работать.