【问题标题】:How to call TextChanged of TextBox WebForm Control如何调用 TextBox WebForm 控件的 TextChanged
【发布时间】:2016-08-03 13:33:05
【问题描述】:

我使用 TextBox WebForm 控件,其配置类似于 Bootstrap Datetimepicker。 我需要启动服务器端TextChanged 事件。 我的代码不起作用,因此它不会调用服务器端部分。

HTML

<div class='datepicker input-group date' id='datetimepickerStart'>
                                    <asp:TextBox ID="StartDate" class="form-control dateField" placeholder="Fecha" required runat="server" OnTextChanged="StartDate_TextChanged"></asp:TextBox>
     <span class="input-group-addon">
     <span class="glyphicon glyphicon-calendar"></span>
</span>
</div>

C#

protected void StartDate_TextChanged(object sender, EventArgs e)
{
    // It does not fire :(        
}

我试图像这样强迫这个事件,但没有快乐。

JS

$('#datetimepickerStart').datetimepicker();

$('#datetimepickerStart').datetimepicker().on('dp.change', function (event) {
       console.log(event.date);
      $('#StartDate').change(); // It does not help
      $('#StartDate').html(event.date); // It does not help             
});

有什么办法解决吗?

【问题讨论】:

  • 您的 html 显示 OnTextChanged="StartDate_TextChanged" 但您的服务器方法是 EndDate_TextChanged?

标签: c# asp.net webforms bootstrap-datetimepicker textchanged


【解决方案1】:

在互联网上搜索了很多之后,我发现了这个对我有用的解决方案:

$('#datetimepickerStart').datetimepicker().on('dp.change', function (event) {
    __doPostBack('<%= Page.ClientID %>');
});

在代码隐藏方面:

public void RaisePostBackEvent()
{
    // Do whatever, maybe call the OnTextChange method.
}

你甚至可以像这样传递一些参数:

__doPostBack('<%= Page.ClientID %>', argument);

public void RaisePostBackEvent(string Arg){...}

【讨论】:

    【解决方案2】:

    为了在您离开文本框时触发 TextChanged 事件,您必须将 TextBox 控件的 AutoPostBack 属性设置为 true。

    https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.autopostback(v=vs.110).aspx

    <asp:TextBox ID="StartDate" class="form-control dateField" autopostback="true" placeholder="Fecha" required runat="server" OnTextChanged="StartDate_TextChanged"></asp:TextBox>
    

    您还需要确保 OnTextChanged 的​​事件处理程序的名称与代码中的方法名称匹配(也许这只是一个错字)。

    最后,我发现 TextChanged 事件有点挑剔,会导致不必要的回发、页面滚动、失去焦点等,因此您可能需要考虑使用客户端解决方案(例如 JQuery) .

    【讨论】:

    • 如果您删除日期时间选择器并在文本框中输入内容,它在失去焦点时是否有效?
    【解决方案3】:

    方法名称不正确,在文本框中添加autopostback= 'true'

    【讨论】:

    • 对此感到抱歉。你在使用验证 js 库吗?
    • 不,我没有使用它。
    【解决方案4】:

    将此行改为

    <asp:TextBox ID="StartDate" class="form-control dateField" placeholder="Fecha" AutoPostBack="True" required runat="server" OnTextChanged="EndDate_TextChanged"></asp:TextBox>
    

    会没事的。

    【讨论】:

    • 首先让我知道您要触发 startdate_textchanged 或 enddate_textchanged?
    • 当你离开这个文本框时触发 textchanged 事件,即写一些文本,然后按 Tab 或单击文本框外的任何位置,它将触发事件 textChanged 谢谢
    • 我更改了答案,请看一下,如果仍然存在问题,请告诉我
    【解决方案5】:

    解决方案是添加 ApiController 并通过 JQuery 消费我需要的东西。

    https://blogs.msdn.microsoft.com/henrikn/2012/02/23/using-asp-net-web-api-with-asp-net-web-forms/

    【讨论】:

      【解决方案6】:

      默认情况下,ASP.Net 页面缓存所有服务器控件更改事件并在回发事件后执行。 因此,通过将控件的 Autopostback 属性设置为 true 来覆盖此默认设置,如下所示。

      【讨论】:

      • 对不起,它不起作用我不知道为什么......我找到了另一个解决方案。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多