MVC中使用内建的HTML辅助方法产生表单元素提交表单与button按钮事件的陷阱

网站模板页有个登陆的退出按钮,当点击时跳转到登陆页面。

 <button onclick="logout()" >退出</button>
 $("#logOut").click(function () {
 location.href = "@Url.Action("Logout", "Account")";
            });

然后再某个页面楼主用了HTML辅助方法产生表单元素,代码如下所示:

@Html.BeginForm("ReturnFile", "File", FormMethod.Post, new { id = "exportForm" }))
    {
    <input type="hidden" id="exportString3" name="exportString3" />
    <input type="hidden" id="fileName3" name="fileName3" />
    }

如果页面中不存在上面方法产生的form,那么系统时可以正常使用退出按钮,但是,当两者同时出现时,点击按钮事件却一直跳向了form指向的controller。因为在其他页面退出没出现这种问题,所以楼主以为是form的问题。。。

首先开始查询HTML辅助方法产生表单元素,在界面上显示的html代码如下(多了一串System.Web.Mvc.Html.MvcForm)):

<form id="exportForm" method="post" action="/File/ReturnFile">
System.Web.Mvc.Html.MvcForm) {
<input id="exportString" type="hidden" name="exportString">
<input id="fileName" type="hidden" name="fileName">
}
</form>

如果直接使用form元素是又是没有问题。

解决办法1(直接使用html元素):

 <form method="POST" action="@Url.Action("ReturnFile", "File")" id="exportForm" >
        <input type="hidden" id="exportString" name="exportString" />
        <input type="hidden" id="fileName" name="fileName" />
    </form>

下班后查了资料,发现是button没有显示定义type的类型,在不同的浏览器会有不同的属性,所以一定要加type="button"。

type 属性规定按钮的类型。提示:请始终为按钮规定 type 属性。Internet Explorer 的默认类型是 "button",而其他浏览器中(包括 W3C 规范)的默认值是 "submit"。

另外楼主的原本的form引用方法错误,居然没有报错。正确的使用方法如下:

A.使用@Html.BeginForm,@Html.EndForm(自定义id和name),网上说要用Html.EndForm()来关闭</form>表单,但是楼主测试的时候IE和火狐不加也会关闭

  @{ Html.BeginForm("ReturnFile", "File" , new { @id = string.Empty },FormMethod.Post,new { id = "exportForm", name = "exportForm" }); }
    {
   @Html.Hidden("exportString1")
    @Html.Hidden("fileName1")
    }
  //不加也可
    @{Html.EndForm();}  

B.常用的用@using方式

 @using (Html.BeginForm("ReturnFile", "File", new { id = "exportForm" }))
    {
        <input type="hidden" id="exportString" name="exportString" />
        <input type="hidden" id="fileName" name="fileName" />
    }

时间: 2024-08-03 11:25:25

MVC中使用内建的HTML辅助方法产生表单元素提交表单与button按钮事件的陷阱的相关文章

SQL点滴9—SQL Server中的事务处理以及SSIS中的内建事务

原文:SQL点滴9-SQL Server中的事务处理以及SSIS中的内建事务 我们可以把SSIS中的整个package包含在一个事务中,但是如果在package的执行过程中有一个表需要锁定应该怎么处理呢?SSIS内建的事务处理可以解决这个问题.在此之前首先来熟悉一下SQL Server中的事务的概念. 事务 SQL Server中的事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中永久的组成部分.如果事务遇到错误且必须取消或回滚,则所有的数据修改均被清除

Lua中table内建排序与C/C++/Java/php/等内排序算法的排序效率比较

Lua这类脚本语言在处理业务逻辑作为配置文件的时候方便省事 但是在大量需要 运算的地方就显得略微不足   按照 Lua内建排序算法 对比C/C++ PHP Java等的快速排序算法进行一下比较. 快速排序算法是基于冒泡排序,优化而来,时间复杂度T(n)=O(nLog2n)  ,可见内部采用了二分策略 . 发现在LuaIDE LDT下直接运行效率要比 通过C++加载运行Lua脚本效率高的多  拿500W个数据排序 来说  ,脚本如下 同样的排序脚本Lua解释器的内置排序算法在LDT下,运行速度比通

ASP.NET MVC中为DropDownListFor设置选中项的方法

在MVC中,当涉及到强类型编辑页,如果有select元素,需要根据当前Model的某个属性值,让Select的某项选中.本篇只整理思路,不涉及完整代码. □ 思路 往前台视图传的类型是List<SelectListItem>,把SelectListItem选中项的Selected属性设置为true,再把该类型对象实例放到ViewBag,ViewData或Model中传递给前台视图. 通过遍历List<SelectListItem>类型对象实例 □ 控制器 ? 1 2 3 4 5 6

在MVC中添加区域的真正正确的方法!

本文是自己1天时间的找原因的结果.上午遇到坑,在网上搜索了无数资料,呵呵,不管是高手.还是菜鸟的文章,都是没有把问题说清楚,在关键地方留了一个大坑,也需我的问题太初级了吧,别人都略过了,呵呵.言归正传(高手请飘过): 在MVC中添加区域Admin,调试时报错: 而我的所有的路由信息都是按网上千篇一律的教材来到配置的,简而言之就是配置AdminAreaRegistration.cs文件和RouteConfig.cs,不清楚的百度. 花费了我将近一天时间查资料,到群里请教,呵呵,没有答案.后来还是我

函数中,内置参数与jQuery方法参数(也可以说是对象键值对)

1.一个匿名函数中的参数,是不可以传递给jQuery方法中的参数. 如: 1 var someFn = function(key,value){ 2 $('selector').css({ 3 key:value 4 }) 5 } 2.一个变量不可改变一个键值对中的key. 如: 1 var a; 2 $('selecor').css({ 3 a:value 4 }) 总结: 匿名函数中的内置参数 key  是传递不到  jQuery 方法css() 中的 key 参数 : value 则可以.

MVC中为DropDownListFor设置选中项的方法

来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=137GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com 1.前端cshtml 2.新增页面-页面加载时,从数据库中加载公司信息 3.修改页面-页面加载时,从数据库中加载所有公司信息,根据选择要修改的记录行的公司ID进行判断,把该公司设置为选中 4.新增/修改 动作,应该是MVC框架封装了,提交表单的时候,自动把这个下拉框选中的Value

HTML 中按钮作为form表单元素提交特性两则 --- 参HTML考标准分析

相同name的submit 类型的input提交行为 描述 这种情况, <input type="submit" name="ACTION" value="Apply"/> <input type="submit" name="ACTION" value="Cancel"/> 其能够作为提交内容, 发送到服务器段的参数的按钮, 对应被点击激活的按钮. 这表示多个

Creating Form Elements --Using BeginForm and EndForm 使用内建的Form辅助器方法 精通ASP.NET MVC 5

Using the BeginForm and EndForm Helper Methods in the CreatePerson.cshtml File

MVC 中使用log4net 打印重复日志解决方法

最近在项目中引用log4net 来打印日志,会发现在同一时间点 打印重复记录: 详见图 其实,解决这个问题挺简单的就是太配置文件上logger 标签上添加一个additivity="false"属性就好了:完美解决.