回车键在asp.net多行文本框控件中插入换行符

dsekswqp  于 2023-02-26  发布在  .NET
关注(0)|答案(9)|浏览(171)

我继承了一些C# /asp.net代码,其中有一个文本框,我想将其设置为多行,我通过添加textmode=“multiline”来实现,但当我尝试插入一个换行符时,回车键提交的却是表单:P
我在谷歌上搜索了一下,看起来默认的行为应该是回车(或control-enter)插入一个换行符,就像我说的,我继承了代码,所以我不确定是否有javascript的恶作剧,或者是否有一个简单的asp.net的事情我必须做。

oxiaedzo

oxiaedzo1#

原来这是Firefox + ASP.NET的一个bug,为defaultButton生成的javascript在Firefox中不起作用,我不得不用一个替代WebForm_FireDefatultButton函数,如here所述:

function WebForm_FireDefaultButton(event, target) {
    var element = event.target || event.srcElement;
    if (event.keyCode == 13 &&
    !(element &&
    element.tagName.toLowerCase() == "textarea"))
    {
        var defaultButton;
        if (__nonMSDOMBrowser)
        {
            defaultButton = document.getElementById(target);
        }
        else
        {
            defaultButton = document.all[target];
        }
        if (defaultButton && typeof defaultButton.click != "undefined")
        {
            defaultButton.click();
            event.cancelBubble = true;
            if (event.stopPropagation)
            {
                event.stopPropagation();
            }
            return false;
        }
    }
    return true;
}
vshtjzan

vshtjzan2#

我创建了一个带有TextBox和Button的示例页面,它对我来说工作得很好:

<asp:TextBox runat="server" ID="textbox1" TextMode="MultiLine" />
<br />
<br />
<asp:Button runat="server" ID="button1" Text="Button 1" onclick="button1_Click" />

因此,它很可能取决于您设置的其他属性或窗体上的其他控件。
Edit:TextChanged事件仅在TextBox失去焦点时触发,因此这不是问题所在。

oknwwptz

oknwwptz3#

我在任何地方都找不到"WebForm_FireDefaultButton" javascript,它是www.example.com正在生成的吗?asp.net is generating?
是的。
生成它是为了支持包含您的控件的窗体和/或Panel的DefaultButton功能。这是它的源代码:

function WebForm_FireDefaultButton(event, target) {
  if (event.keyCode == 13) {
    var src = event.srcElement || event.target;
    if (!src || (src.tagName.toLowerCase() != "textarea")) {
      var defaultButton;
      if (__nonMSDOMBrowser) {
        defaultButton = document.getElementById(target);
      }
      else {
        defaultButton = document.all[target];
      }
      if (defaultButton && typeof (defaultButton.click) != "undefined") {
        defaultButton.click();
        event.cancelBubble = true;
        if (event.stopPropagation) event.stopPropagation();
        return false;
      }
    }
  }
  return true;
}
myzjeezk

myzjeezk4#

我怀疑这是(就像你说的)一些自定义javascript代码。
原来的asp.net控件工作正常...您将不得不检查代码

8zzbczxx

8zzbczxx5#

您是否正在处理文本框的textchanged事件?这意味着ASP.NET将文本框设置为对任何 * 可能 * 导致文本框失去焦点的内容(包括回车键)进行回发(提交页面)。

ie3xauqp

ie3xauqp6#

@dave-ward,我刚刚挖掘了土丘的javascript。大部分是ASP.NET生成的用于验证和 AJAX 的东西,还有一堆以“WebForm_”开头的东西,我猜是做默认按钮的标准东西,等等。我们放在页面上的唯一javascript是用于切换可见性和做一些自定义验证的...
编辑:我确实找到了下面的内容,但我不明白:P文本区域所在表单的开头,以及后来找到的脚本:(注意,stackoverflow上的某些东西弄乱了下划线)

<form name="Form1" method="post" action="default.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="Form1">

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
    theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>
r7s23pms

r7s23pms8#

这对我很有效
<asp:TextBox ID="emailTo" TextMode="MultiLine" Rows="5" Columns="25" Wrap="true" Style="white-space:normal" runat="server"></asp:TextBox>

au9on6nz

au9on6nz9#

您可以使用\n作为回车键,例如[a-zA-Z 0-9/.\n]{20,500}

相关问题