我使用这样的导航:
<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
一切正常。
如何避免我的浏览器编码我的网址并防止出现错误?
答案 0 :(得分:0)
如果你在事件处理程序中做的最后一件事是转到确切的href,那么删除: -
location.pathname = $(this).attr('href');
并确保您不要preventDefault
或return false;
。
正常点击事件后,浏览器会使用href
从anchor
重定向。
尝试类似: -用户也可以选择留在页面上(弹出窗口有是/否按钮, 如果它的脏,则防止默认),然后如果他选择 再次导航,同样会发生
$('a').on('click', function (event) {
if(dirty){
event.preventDefault();
$('#yes').attr('href', $(this).attr('href'));
$('#popup').show();
}
});
并创建#yes
作为锚点。