Подтвердить что ты не робот

Проблема с текстовым полем внутри панели обновления - не вызывает событие OnTextChanged

У меня есть следующая ситуация: у меня есть текстовое поле внутри панели обновления ajax. Там, где пользователь вводит текстовое поле, я должен отображать сообщение (другое сообщение, которое зависит от введенных пользователем данных).

     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <asp:TextBox ID="txtMyTexbox" runat="server" Width="500px" OnTextChanged="txtMyTexbox_TextChanged" AutoPostBack="true"></asp:TextBox>
            <br />
            <asp:Label ID="lblMessage" runat="server" CssClass="errorMessage" Visible="false">Hello World</asp:Label>
         </ContentTemplate>
            <Triggers>
             <asp:AsyncPostBackTrigger ControlID="txtMyTexbox" />
            </Triggers>
      </asp:UpdatePanel>

На стороне сервера я написал следующее при загрузке страницы

ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(txtMyTexbox);           

и метод, подобный этому

protected void txtMyTexbox_TextChanged(object sender, EventArgs e)
    {           
            if (.....)
            {
                lblMessage.Visible = false;
            }
            else
            {
                lblMessage.Visible = true;
            }            
    }

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

Я что-то упустил?

4b9b3361

Ответ 1

Я не уверен, что ваша проблема имеет какое-то отношение к UpdatePanel.

На самом деле событие TextChanged не срабатывает при наборе текста. Он будет работать только после того, как текстовое поле теряет фокус. Это происходит напрямую, если для параметра AutoPostBack установлено значение True или когда происходит следующая обратная передача. Пожалуйста, просмотрите документы для свойство AutoPostBack и событие TextChanged.

Afaik, лучше всего, вероятно, обработать событие keyup в javascript.

Вот простой пример jQuery:

$(document).ready(function() {
    $(':text[id$=YourTextBox]').keyup(function() {
        if ($(this).val() === "your special value") {
            $('span[id$=YourLabel]').css('visibility', 'visible');
        }
        else {
            $('span[id$=YourLabel]').css('visibility', 'hidden');
        }
    });
});

Ответ 2

Задайте свойство EventName для вашего txtMyTexbox AsyncPostBackTrigger в TextChanged

<Triggers>             
    <asp:AsyncPostBackTrigger ControlID="txtMyTexbox" EventName="TextChanged" />            
</Triggers>

Другое предложение:

Попробовали ли вы посмотреть элемент управления AutoComplete, который является частью AjaxControlToolKit? Он ведет себя так же, как вы хотите, чтобы ваше решение велось.

Ответ 3

его strnage знать, что даже после добавления панели обновления /AsyncPostBackTrigger, TextBox ChangeEvent работает неправильно. Некоторое время его работы, а иногда и нет. Поскольку его асинхронный вызов, нам нужно некоторое время обновить или ждать или непредсказуемо, Надежды microsoft придумают компетентный. Ниже приведен простой способ проверить имя пользователя довольно хорошо

------ В разделе Page_Load - aspx.cs -----------------------

this.TextBox1.Attributes.Add( "onKeyUp", "fnUNameSubmit (this);" );

------- в aspx -add script --------------------------------- ------

<script language="javascript" type="text/javascript">

function fnUNameSubmit(urInput) {   
var inpt= urInput.value;
if (inpt.length > 21) { 
document.getElementById('<%= TextBox1.ClientID %>').style.backgroundColor = "green";
document.form1.submit();  // This is only trick we use here..
}
else {
document.getElementById('<%= TextBox1.ClientID %>').style.backgroundColor = "red";
}
  }
</script>

------- в aspx -add script --------------------------------- ------ ---------------- aspx.cs ------------------- if (TextBox1.Text.Length > 21)       {           CheckUsrName();           Label2.Text = ";       }       еще       {           Label2.Text =" Длина меньше 21";//давайте сделаем что-нибудь... bla..bla       } ------------------------------------------------- CheckUsername()

public void CheckUsrName()   {

  Call dB values

}

Ответ 4

Вы не должны использовать RegisterAsyncPostBackControl для своего TextBox. Этот метод действительно используется только для элементов управления, которые находятся за пределами UpdatePanels. Я бы попытался удалить эту строку кода и посмотреть, что произойдет.

Смотрите это для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerasyncpostbackcontrol.aspx

Ответ 5

обходной метод проверки текстового поля - causevalidation свойство и установить его в true

Ответ 6

Элемент управления, который используется в AsyncPostBackTrigger, должен находиться за пределами панели обновления (что вызывает срабатывание вызова Async) следующим образом:

<tr>
    <td colspan="4"><asp:Label ID="lblEnter_Successfully"  Text="Enter Record SuccessFully" runat="server" Visible ="false" ForeColor ="Blue" Font-Size ="Larger" Font-Bold ="true"></asp:Label>
    </td>
</tr>                                           
</table>                
</ContentTemplate>

  <Triggers>
     <asp:AsyncPostBackTrigger ControlID = "Button_Save" EventName ="Click"/>
  </Triggers>                       

</asp:UpdatePanel>
            <table>
              <tr>
                <td width = "472px" align ="right">             
                    <asp:Button ID="Button_Save" runat="server" Text="Save"  OnClientClick ="return URLValidation();"/>
                    <asp:Button ID="Button_Clear" runat="server" Text="Clear"/>
                </td>
              </tr>
            </table>