IE9 и AJAX - список не обновляется (ASP.NET и MVC3) - PullRequest
0 голосов
/ 03 апреля 2012

Я новичок в веб-разработке и ее принципах, поэтому извиняюсь, если мой вопрос не кажется ясным.

Пока история ......

Я пишу приложение с открытым исходным кодом для изучения ASP.NET MVC3. Сейчас я нахожусь на этапе, когда я создаю свой CRUD-контроллер, чтобы позволить мне создавать несколько новых типов. Теперь я создал Контроллер SiteAdmin, который содержит мою панель инструментов и имеет представление. Представление будет содержать вкладок . Я изучал, как обрабатывать вкладки, используя следующую запись блога и JQuery UI

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

Я решил использовать пример AJAX для обработки моих вкладок, в результате чего я передаю параметр индекса в метод действия контроллера, называемый AjaxGetTab . Этот метод (согласно сообщению в блоге) возвращает частичное представление для требуемого типа. В частичном представлении есть Create Controller Action Method's, например, CreateTransactionType (HttpPost), который создает новые записи.

«Остановите вафлю, в чем проблема»

Проблема в том, что мой список на вкладке в представлении не обновляется после завершения метода Create. Эта проблема существует только в IE9 (только IE, который я тестировал) , но Chrome и Firefox работают, т.е. список обновляется.

Я проверил, что записи в базе данных существуют.

Мой код здесь:

JQuery в Dashboard.cshtml:

<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 Ответ

1 голос
/ 03 апреля 2012

Замените свой

$.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 в настройках, он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...