使用asp.net mvc应用程序中的href属性重定向无法正常工作

时间:2016-03-04 08:13:58

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

我使用这样的导航:

<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路由失败:

  

&#39; /&#39;中的服务器错误应用

     

从中检测到潜在危险的Request.Path值   客户(?)。

     

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

     

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

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

堆栈追踪:

     

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

但是,当我只是通过像

这样的深层链接进行导航时
localhost:52500/MyMessages/?messageId=1
一切正常。

如何避免我的浏览器编码我的网址并防止出现错误?

1 个答案:

答案 0 :(得分:0)

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

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

并确保您不要preventDefaultreturn false;

正常点击事件后,浏览器会使用hrefanchor重定向。

  

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

尝试类似: -

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

并创建#yes作为锚点。