Stack Exchange MiniProfiler不显示配置文件框?

时间:2011-08-26 00:48:57

标签: c# asp.net-mvc-2 mvc-mini-profiler

我已经安装了Stack Exchange MiniProfiler,而View Source显示它正在呈现预期的HTML。但是它没有显示角落里的小轮廓细节框 - 可能是错的?

<script src="/v2/Scripts/jquery-1.6.1.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="/v2/mini-profiler-includes.css?v=1.7.0.0">
<script type="text/javascript" src="/v2/mini-profiler-yepnope.1.0.1.js"></script>
<script type="text/javascript">
    yepnope([
        { test: window.jQuery, nope: '/v2/mini-profiler-jquery.1.6.1.js' },
        { test: window.jQuery && window.jQuery.tmpl, nope: '/v2/mini-profiler-jquery.tmpl.beta1.js' },
        { load: '/v2/mini-profiler-includes.js?v=1.7.0.0',
           complete: function() {
               jQuery(function() {
                   MiniProfiler.init({
                       ids: ["025bbb91-9605-44b7-b33d-d8b196326dbc","2c74ce3e-8de6-4f8d-920a-e8708b22231b"],
                       path: '/v2/',
                       version: '1.7.0.0',
                       renderPosition: 'left',
                       showTrivial: false,
                       showChildrenTime: false,
                       maxTracesToShow: 15
                   });
               });
         }
    }]);
</script>

在我的Global.asax.cs中:

    protected void Application_BeginRequest()
    {
        if (Request.IsLocal)
        {
            MiniProfiler.Start();
        }
    }

    protected void Application_EndRequest()
    {
        MiniProfiler.Stop();
    }

enter image description here

编辑:感谢Sam的输入,我已将问题跟踪到我的.ajaxSetup()方法。当它被注释掉时,配置文件框会再次显示。但我不明白为什么这是一个问题:

$.ajaxSetup({
    data: "{}",
    dataFilter: function (data) {
        var msg;

        if (data == "") {
            msg = data;
        }
        else if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function') {
            msg = JSON.parse(data);
        }
        else {
            msg = eval('(' + data + ')');
        }

        if (msg.hasOwnProperty('d')) {
            return msg.d;
        }
        else {
            return msg;
        }
    }
});

2 个答案:

答案 0 :(得分:2)

这种情况很有意义,也许你的过滤器会破坏结果。

添加一个绕过过滤的条件,如果你看到它是一个MiniProfiler JSON结果应该修复它。

答案 1 :(得分:2)

我的猜测是全局dataFilter正在干扰MiniProfiler的$.get() jQuery模板模板文件。在HTML片段上调用JSON.parse()肯定会引发错误。

由于您使用的是最新版本的jQuery,因此您无需手动添加优化的JSON解析。该功能包含在1.4中的jQuery核心中。

所以,最简单的说,尝试将全局dataFilter更改为:

$.ajaxSetup({
  data: "{}",
  dataFilter: function (msg) {
    if (msg.hasOwnProperty('d')) {
        return msg.d;
    }
    else {
        return msg;
    }
  }
});

如果这不能解决问题,您可能需要查看jQuery 1.5的转换器而不是全局dataFilter,它允许您将类似dataFilter的操作应用于某些Content-Type的响应。实际上在这里重写了jQuery 1.5 AJAX的人的一些很好的例子:http://encosia.com/jquery-1-5s-ajax-rewrite-and-asp-net-services-all-is-well/#comments