1

我正在尝试在 MVC3 中使用 AJAX 动态加载表。为什么这只能在 IE9 的兼容模式下工作?有办法解决吗?

看法:

<script src="../../Scripts/jquery-1.5.1.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.11.js" type="text/javascript"></script>
<script type="text/javascript">

    $.ajax({
        type: 'POST',        
        url: "/Index/GetApplicationsForUserJSON",       
        success: function (data) {
            for (var i = 0; i < data.length; i++) {
                $("#ApplicationsForUser tbody").append("<tr>" +
                            "<td>" + data[i].Application + "</td>" +
                            "<td>" + data[i].Roles + "</td>" +
                        "</tr>");
            }

            $("tr:odd").css({ 'backgroundColor': '#ebf0f5' });            
        }
    });

</script>

        <table id="ApplicationsForUser" class="ui-widget ui-widget-content" style="width: 99%;
            margin: 3px 0px 0px 3px">
            <thead>
                <tr class="ui-widget-header ">
                    <th style="width: 45%">
                        Application
                    </th>
                    <th style="width: 45%">
                        Roles
                    </th>                    
                </tr>
            </thead>
        </table>

控制器:

  public JsonResult GetApplicationsForUserJSON()
        {

            Dictionary<string, string> tableData = new Dictionary<string, string>();
            tableData.Add("row1", "row1data");

            var jsonData = tableData
                          .Select(c => new
                          {
                              Application = c.Key,
                              Roles = c.Value
                          });

            return Json(jsonData, JsonRequestBehavior.AllowGet);

        }

编辑:图片!

兼容模式关闭

兼容模式开启

4

2 回答 2

1

我在您的示例中没有看到 tbody 元素。不过,您的 .append() 调用选择器包括一个。也许在兼容模式下,IE9 “假设” tbody 的存在作为表的内容。

于 2012-07-05T12:27:25.933 回答
0

因为有些浏览器即使在不打算这样做的情况下也可以存储数据,所以某些浏览器元素不会根据用户请求刷新。因此您必须通过在控制器级别指定这一点来强制执行此操作:

[OutputCache(NoStore = true, Duration = 0)]

这将告诉浏览器不要存储来自先前请求的请求相关数据。

于 2012-07-05T12:02:05.723 回答