加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – Action在提交时执行两次

发布时间:2020-12-16 06:23:57 所属栏目:asp.Net 来源:网络整理
导读:我的控制器动作正在执行两次. Fiddler显示两个请求和响应,第一个有一个图标,表示“会话被客户端,Fiddler或服务器中止”. 但我无法弄清楚这是怎么回事,或者为什么. 以下是具体内容: 我有一个视图(ThingFinancials)的部分看起来像这样: @{ using (Html.Begin
我的控制器动作正在执行两次. Fiddler显示两个请求和响应,第一个有一个图标,表示“会话被客户端,Fiddler或服务器中止”.

但我无法弄清楚这是怎么回事,或者为什么.

以下是具体内容:

我有一个视图(ThingFinancials)的部分看起来像这样:

@{ using (Html.BeginForm("ConfirmThing","Thing",null,FormMethod.Get,new { id = "frmGo" }))
   {
       @Html.HiddenFor(model => model.ThingID)
    <button id="btnGo">
        Thing is a Go - Notify People</button>
   }
}

btnGo的javascript看起来像这样:

$("#btnGo").click(function () {
        var form = $("#frmGo");
        form.submit();
    });

动作(剥离)看起来像这样:

public ActionResult ConfirmThing(int thingID)
   {
        [do some database stuff]
        [send some emails]

        var financials = GetFinancials(thingID);
        return View("ThingFinancials",financials);
   }

对我来说唯一不寻常的是你看到的URL会以[Website] / Thing / ThingFinancials / 47开头,提交后的URL会是[Website] / Thing / ConfirmThing?ThingID = 47.

(如果您想知道为什么Action名称与View名称不匹配,那是因为ThingFinancials上有多个表单标签,并且它们不能都具有相同的操作名称.)

是否有Server.Transfer在幕后发生,或类似的东西?

解决方法

如果您使用提交按钮,则需要在使用javascript提交时取消默认行为,否则您将提交两次.试试这个:

$("#btnGo").click(function () {
        var form = $("#frmGo");
        // event.preventDefault(); doesn't work in IE8 so do the following instead
        (event.preventDefault) ? event.preventDefault() : event.returnValue = false;
        form.submit();
    });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读