前言
对于这个问题,我有一个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>

当用户单击链接时,它会将他们带到一个sendToDocketSearchjavascript函数(准备搜索文档):
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);
    }

上面的controller方法运行;然后,由于表单被提交,页面的HttpPost操作发生。在我的本地电脑上运行时,会单击链接,下一页将加载而不会出现戏剧效果。
问题
当我将代码上传到dev/test服务器时,问题就开始了。我不知道如何使用断点,而故障排除一个活跃的网站,所以我跟随浏览器开发工具,以监测网络流量。
在本地服务器上运行网站时单击链接时,该过程将继续:
超链接将我带到传递要搜索的信息的方法
页面/视图/表单已提交
控制器重定向到我必须去的地方。
当我点击网站上的链接并且它在服务器上时,第一次点击就被完全忽略了——网络流量显示它试图通过上面的javascript功能导航到控制器,但是失败发生得太快了,我甚至无法截图。此时,该页将再次加载。
当我第二次点击同一个链接时,它工作正常。
我相信view/javascript/controller代码之所以能工作,是因为它第二次工作(以及随后的尝试)。它只是第一次在服务器上公然失败;之后,用户就没事了。不过,我想防止“第一次”失败,我想知道问题可能是什么。。。
时机不对
我可能传递信息太早(或者太晚,我的网站/服务器无法正确处理)。这一页第二次正确地完成了,所以也许我只是在“开门见山”,不再等待页面加载过程自行排序。(也许我可以在第一页的$(document).ready()javascript部分进行修改以“延迟”,允许人们单击链接。)
代码错误
如果我真的搞错了什么,我会很高兴承认错误的代码。可能是我的javascript函数,也可能是我控制器中的代码;无论如何,有些东西正在使函数调用的第一次传递被拒绝。也许我的代码不好,因为问题不会在第二次出现,我得到了错误的安全感(即,在页面完全加载后,系统愿意原谅我的代码有问题)。
服务器问题/其他
我想知道我上传最新更改时是否遗漏了一些内容,或者我是否应该联系我的网络团队,以防需要激活权限才能使网站正常工作。我已经和他们联系过其他事情了,所以我可以利用今天的机会。
有一个替代方案可以帮助我防止这个问题的发生,但我想知道为什么会发生“首次”失败其他类似的行动在网站上第一次失败,我想把解决这个问题的方法运用到他们身上。
谢谢你看这个问题。祝你有美好的一天。

最佳答案

您确定要在submitForm();完成之前呼叫jQuery.ajax吗?您的ajax调用是异步的,因此它将在有时间完成之前命中submitForm();submitForm();应该改成您的success活动吗?

07-24 09:50
查看更多