【问题标题】:Redirecting using href attributes in asp.net mvc application not working在 asp.net mvc 应用程序中使用 href 属性重定向不起作用
【发布时间】:2016-06-17 21:26:49
【问题描述】:

我使用这样的导航:

<a href="/MyMessages/?messageId=1"> First message </>

但在导航用户之前,我会在 JavaScript 中处理事件:

$('a').on('click', function (event) {
    event.preventDefault();
    // Do stuff
    // Navigate:
    location.pathname = $(this).attr('href'); // href is /MyMessages/?messageId=1
});

但它在浏览器中被编码,地址是:

localhost:52500/MyMessages/%3FmessageId=1

mvc 路由失败:

“/”应用程序中的服务器错误。

从 客户(?)。

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.Web.HttpException:潜在危险 从客户端检测到 Request.Path 值 (?)。

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[HttpException (0x80004005): 有潜在危险的 Request.Path 从客户端检测到值 (?)。]
System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +9807692
System.Web.PipelineStepManager.ValidateHelper(HttpContext 上下文) +53

但是当我只是通过深层链接导航时

localhost:52500/MyMessages/?messageId=1

一切正常。

如何避免浏览器对我的 url 进行编码并防止出现错误?

【问题讨论】:

    标签: javascript jquery asp.net asp.net-mvc url


    【解决方案1】:

    如果您在事件处理程序中做的最后一件事是转到确切的 href,则删除:-

    location.pathname = $(this).attr('href');
    

    并确保您不要使用preventDefaultreturn false;

    在点击事件之后,浏览器将使用href 关闭anchor 重定向正常。

    用户还可以选择留在页面上(弹出窗口有是/否按钮, 在防止默认(如果它很脏)之后),然后如果他选择 再次导航,同样会发生

    尝试类似:-

    $('a').on('click', function (event) {
        if(dirty){
           event.preventDefault();
           $('#yes').attr('href', $(this).attr('href'));
           $('#popup').show();
        }
    });
    

    并创建#yes 作为锚点。

    【讨论】:

    • 这行得通。但是,我的实现要求我阻止默认设置,这样浏览器就不会生成弹出窗口。有没有这样的方法?
    • 生成弹出窗口?你能再解释一下吗?
    • 我将表单标记为脏并生成一个自定义弹出窗口,通知用户在导航时有未保存的更改。为了使它起作用(不显示通用浏览器弹出窗口),而是显示我自己的自定义弹出窗口,我必须阻止默认。
    • 你为什么不阻止默认if它很脏。否则不要让它运行并允许锚重定向。
    • 用户也可以选择停留在页面上(弹出窗口有是/否按钮,如果它脏了就阻止默认),然后如果他选择再次导航,同样会发生
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多