在IE中提交按钮行为

时间:2010-09-03 16:55:49

标签: asp.net-mvc input submit

我在IE中遇到问题。当焦点位于最后一个输入控件上时按Enter键会将焦点发送到“下一步”按钮。这提交了表格。到目前为止,非常好。

我的基类WizardController中的代码查看Next提交按钮是否为null,如下所示:

        protected string NextButton 
        {
            get 
            { 
                return ControllerContext.HttpContext.Request.Params["NextButton"];Nex
            }
        }

但是,尽管提交了表单,但除非用户用鼠标单击该按钮,否则此属性将返回null。

这显然是错误的,但我不知道它为什么会发生。

编辑指明精确问题:

如果HTML表单中只有一个TEXT输入控件被呈现给浏览器,则只会出现此问题。

结束编辑

安德鲁

2 个答案:

答案 0 :(得分:2)

我终于找到了解决问题的方法:

这似乎是IE中的一个错误,如果在呈现的HTML表单中有单个文本输入,那么IE将无法正确提交表单。该问题在(简要)描述于:

Form Submit via Enter Key when using IE

在上面的链接中,没有给出错误发生原因的说明,也没有描述IE的版本,所以一个全面的解决方案更好。

本文中建议的解决方法是添加一个css隐藏文本输入(带有IE的条件):

<!--[if IE]>
  <input type="text" style="display: none;" disabled="disabled" size="1" />
<![endif]-->

这对我有用,所以问题就解决了。

以下内容是为了记录我遇到的问题:

与文章中描述的问题不同,我的表单确实提交了。但是,当我尝试通过按Tab键或输入键来检查访问了哪个按钮时,HttpContext.Request.Params集合中没有提交按钮。所以我看到的行为略有不同。

上面的文章确定的是,只有一个文本输入控件时才会看到此行为。例如,单个复选框不会导致问题。

我希望这能够充分记录问题......并且MS有一天会纠正错误。

答案 1 :(得分:1)

一个简单的解决方法可能是使用隐藏的表单元素并依赖于它而不是按钮。

<input type='hidden' name='action' value='next' />

如果您有多个按钮,则可以在提交之前始终使用JavaScript更改操作元素的值。