【问题标题】:Enter Does Not Work For Submit, ASP.NET Page Refreshes and Doesn't SearchEnter 对提交不起作用,ASP.NET 页面刷新且不搜索
【发布时间】:2013-11-12 23:39:25
【问题描述】:

我正在使用带有 C# 后端的 ASP.NET 站点。标签所在的位置有一个.Master页面,填写表格后按Enter键会搜索该站点上的其他搜索页面。但是,我们有一页有几个文本框,当您按 Enter 进行搜索时,它似乎只是刷新并重新加载页面而不进行搜索。为了搜索,您必须点击搜索按钮(这是一个 igtxt:WebImageButton )。到目前为止,我发现的所有解决方案都涉及人们使用 javascript 在提交时调用某种函数。据我所知,当您点击搜索按钮时没有调用 javascript,它全部在 C# 代码中。我再次发现自己在 SO 和其他网站上寻找答案,但似乎没有一个解决方案适合我的情况。表单标签如下:

<form id="form1" runat="server">

网络图像按钮调用运行搜索代码的 btn_SearchClick 函数。但由于表单是在 .Master 文件中启动的,因此我无法对其进行编辑,因为它也会影响所有其他页面。有没有办法让输入从表单中调用 btn_SearchClick 而不必将其放在表单标签中?我不确定发生了什么变化会导致这一行为出现在一个页面上,而其他页面都没有。

【问题讨论】:

  • 浏览器在点击 ENTER 时真的很奇怪。我忘记了规则,但这与页面上有多少输入控件有关,它有时会提交您的表单但不单击您的提交按钮 - 在大多数 Web 框架中,这很好,但在 ASP.NET WebForms世界,提交表单但不使用按钮会导致按钮单击处理程序未触发,这就是我确定您的代码所在的位置。我建议找到一些处理 ENTER 键的 javascript,并将其附加到表单上您需要的任何位置。
  • @Justin 你能发布小的可测试代码,以便我们可以复制问题吗?

标签: c# asp.net


【解决方案1】:
if (!IsPostBack)
{
   TextBox1.Attributes.Add("onKeyPress", 
                   "doClick('" + btnSearch.ClientID + "',event)");
}
<SCRIPT type=text/javascript>
    function doClick(buttonName,e)
    {
        //the purpose of this function is to allow the enter key to 
        //point to the correct button to click.
        var key;

         if(window.event)
              key = window.event.keyCode;     //IE
         else
              key = e.which;     //firefox

        if (key == 13)
        {
            //Get the button the user wants to have clicked
            var btn = document.getElementById(buttonName);
            if (btn != null)
            { //If we find the button click it
                btn.click();
                event.keyCode = 0
            }
        }
   }
</SCRIPT>

或者你可以使用默认按钮。当光标在这个框中时它可以工作

protected void Page_Load(object sender, EventArgs e)
        {
            this.Form.DefaultButton = this.btnSubmit.UniqueID;
        }

【讨论】:

  • 第一个 sn-p 最终会去哪里?在 .cs 代码中?
  • 感谢 rush,这似乎可以解决问题,尽管我想将其用作临时修复,因为我试图找到此页面的真正问题。我看到您指定了 Firefox 和 IE,但我可以假设这也适用于 Chrome 吗?我正在为所有浏览器格式化 CSS 文件,因为在 Chrome 和 Firefox 中,一些格式有点偏离。
【解决方案2】:

添加一些jquery 来控制文本框上的 Enter 键行为。像这样的:

$(function() {
  $('#<%=txtTextbox.ClientID%>').keypress(function (e) {
    if (e.which == 13) {
      e.preventDefault();
      $('#<%=btn_SearchClick.ClientID%>').click();
    }
  });
});

【讨论】:

  • 我只是尝试实现此代码,但它似乎对我不起作用。打算再做一些测试,看看我能不能让它工作。
猜你喜欢
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多