ASP.NET MVC / jQuery / AJAX:链接无法第一次工作,但第二次工作(页面重新加载后)

时间:2015-07-10 14:56:46

标签: javascript jquery html ajax asp.net-mvc

前言

对于这个问题,我有一个 MVC 局部视图。视图有一个显示文档列表的部分。每个文档都有一个超链接:单击时,超链接将用户带到显示其他信息的第二个页面视图。

该链接位于无序列表中:

<a style="text-decoration:underline;" onclick="sendToDocketSearch('@currentDocument.DktYear','@currentDocument.DktSequence','@currentDocument.DktSubActionID');">@currentDocument.DktYear.ToString().PadLeft(2, '0') - @currentDocument.DktSequence.ToString().PadLeft(5, '0')</a>

当用户点击链接时,会将他们带到sendToDocketSearch javascript函数(准备搜索文档):

var sendToDocketSearch = function (yearOfDocket, sequenceOfDocket, dktSubActionIDOfDocket) {
        jQuery.ajax({
            type: "POST",
            url: "@Url.Action("DocketSearchOnDemand")",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ docketYear: yearOfDocket, 
                               docketSequence: sequenceOfDocket,
                               DktSubActionID: dktSubActionIDOfDocket,
                             userIsAuthorized: '@Model.userIsAuthorized' }),
            success: function (data) {
                alert(data);
            },
            failure: function (errMsg) {
                alert(errMsg);
            }
        });

        submitForm();
    }

请注意,在运行以下控制器方法后提交页面/视图/表单:

public ActionResult DocketSearchOnDemand(string docketYear, string docketSequence, decimal DktSubActionID, bool userIsAuthorized, PortalIndexView viewmodel)
    {
        System.Web.HttpContext.Current.Session.Add("userIsAuthorized", userIsAuthorized);

        string docketSearch = docketYear + "-" + docketSequence;
        System.Web.HttpContext.Current.Session["DocketSearchOnDemand"] = docketSearch;
        if (DktSubActionID > 0)
        {
            System.Web.HttpContext.Current.Session["DktSubActionID"] = DktSubActionID.ToString();
            System.Web.HttpContext.Current.Session["searchingCustomID"] = true;
        }
        else
        {
            System.Web.HttpContext.Current.Session["DktSubActionID"] = "1";
            System.Web.HttpContext.Current.Session["searchingCustomID"] = false;
        }

        return View(viewmodel);
    }

以上控制器方法运行;然后,因为表单已提交,所以页面的HttpPost操作会发生。在我的本地PC上运行时,点击该链接,下载页面没有戏剧性。

问题

当我将代码上传到dev / test服务器时,问题就开始了。在对活动网站进行故障排除时,我不知道如何使用断点,因此我按照浏览器开发人员工具来监控网络流量。

在本地服务器上运行网站时单击链接时,该过程将继续:

  • 超链接将我带到我传递要搜索的信息的方法
  • 页面/视图/表单已提交
  • 控制器重定向到我必须去的地方。

当我点击网站上的链接及其在服务器上时,第一次点击完全被忽略 - 网络流量显示它尝试通过javascript功能导航到控制器以上,但失败的发生得如此之快,我甚至无法截取它。该页面此时再次重新加载。

当我第二次点击同一链接时,它可以正常工作。

我认为view / javascript / controller代码有效,因为它第二次工作(以及后续尝试)。它只是在服务器上第一次公然失败;之后,用户很好。我想阻止这种情况&#34;第一次&#34;然而,失败了,我想知道问题可能是什么......

  1. 时间不佳
  2. 我可能过早地传递信息(或者我的网站/服务器正确处理它太晚了)。这个页面第二次正确地完成了,所以也许我只是&#34;跳枪#34;通过不等待一点点的页面加载过程来排序自己。 (也许我可以通过第一页的$(document).ready() javascript部分来摆弄&#34;延迟&#34;允许用户点击链接。)

    1. 代码错误
    2. 如果我真的搞砸了什么,我会很高兴承认错误的代码。也许它是我的javascript函数,或者它可能是我控制器中的代码;无论如何,某些东西正在使该函数调用的第一遍被拒绝。也许我的代码很糟糕,因为这个问题第二次没有发生,而且我得到了一种虚假的安全感(即我的代码存在问题,系统在页面有<之后愿意原谅em>彻底加载)。

      1. 服务器问题/杂项
      2. 我想知道当我上传最新更改时是否遗漏了某些内容,或者我是否应该联系我的网络小组,以防需要激活权限以使网站顺利运行。我已经就其他事情与他们保持联系,所以今天我可能会利用这个机会。

        有一个替代方案可以帮助我防止这个问题的发生,但我想找出为什么&#34;第一次&#34;失败发生。其他类似的操作在网站上首次失败,我想将这个问题的解决方案应用于他们。

        感谢您查看此问题。祝你有美好的一天。

1 个答案:

答案 0 :(得分:1)

您确定要在submitForm();完成之前致电jQuery.ajax吗?你的ajax调用是异步的,所以它会在它有时间完成之前点击submitForm();。是submitForm();应该在您的success活动中吗?