IE9和AJAX - 列表不刷新(ASP.NET和MVC3)

时间:2012-04-03 19:08:07

标签: ajax asp.net-mvc-3 jquery-ui jquery

我是Web开发及其原则的新手,如果我的问题看起来不明确,那么道歉。

故事到目前为止......

我正在编写一个开源应用程序来学习ASP.NET MVC3。现在我正处于创建我的CRUD控制器的阶段,允许我创建一些新的类型。现在我已经创建了一个SiteAdmin控制器来保存我的仪表板,并且有一个View。视图将包含标签。我一直在学习如何使用以下博客文章和JQuery UI来处理标签

http://ericdotnet.wordpress.com/2009/03/17/jquery-ui-tabs-and-aspnet-mvc/

我决定使用AJAX示例来处理我的标签,我将索引参数传递给名为 AjaxGetTab 的Controller Action方法。此方法(根据博客文章)返回所需类型的部分视图。在部分视图中,有创建控制器操作方法,例如CreateTransactionType(HttpPost),用于创建新记录。

“停止胡言乱语是什么问题”

问题是,在Create方法完成后,我在视图选项卡中的列表不会刷新。此问题仅存在于IE9(仅我测试的IE) Chrome和Firefox工作,即列表刷新。

我已检查数据库记录是否存在。

我的代码在这里:

Dashboard.cshtml中的JQuery:

<script type="text/javascript">
    $(document).ready(function() {
        $("#tabs").tabs();
        getContentTab (1);
    });

    function getContentTab(index) {
        var url='@Url.Content("~/SiteAdmin/AjaxGetTab")/' + index;
        var targetDiv = "#tabs-" + index;
        var ajaxLoading = "<img id='ajax-loader' src='@Url.Content("~/Content")/ajax-loader.gif' align='left' height='28' width='28'>";

        $(targetDiv).html("<p>" + ajaxLoading + " Loading...</p>"); 

        $.get(url,null, function(result) {
            $(targetDiv).html(result);
        });
    }

SiteAdminController AjaxGetTab方法:

    /// <summary>
    /// AJAX action method to obtain the correct Tab to use.
    /// </summary>
    /// <param name="index">Tab number</param>
    /// <returns>Partial View</returns>
    public ActionResult AjaxGetTab(int id)
    {
        string partialViewName = string.Empty;
        object model = null;

        //--Decide which view and model to pass back.
        switch (id)
        {
            case 1:
                partialViewName = "_TransactionType";
                model = db.TransactionTypes.ToList();
                break;
            case 2:
                partialViewName = "_DirectionType";
                model = db.DirectionTypes.ToList();
                break;
            case 3:
                partialViewName = "_UserType";
                model = db.UserTypes.ToList();
                break;
            case 4:
                partialViewName = "_CurrencyType";
                model = db.CurrencyTypes.ToList();
                break;
            case 5:
                partialViewName = "_tabError";
                break;

        }

        return PartialView(partialViewName,model);
    }
}

SiteAdminController CreateTransactionType方法:

        [HttpPost]
    public ActionResult CreateTransactionType(TransactionType model)
    {
        try
        {
            // TODO: Add insert logic here
            if (ModelState.IsValid)
            {
                model.id = Guid.NewGuid();
                model.RecordStatus = " ";
                model.CreatedDate = DateTime.Now;
                db.TransactionTypes.AddObject(model);
                db.SaveChanges();

            }
            return RedirectToAction("Dashboard");
        }
        catch
        {
            return PartialView("_tabError");
        }
    }

1 个答案:

答案 0 :(得分:1)

替换

$.get(url,null, function(result) {
     $(targetDiv).html(result);
});

人:

$.ajax({
  type: 'get',
  url: url,
  cache: false,
  success: function(result) {
    $(targetDiv).html(result);
  }
});

问题是IE缓存了ajax请求,所以通过在设置中设置cache:false它应该可以工作。