ASP.NET MVC 2 Ajax не работает в IE8, но работает в Safari и Firefox - PullRequest
0 голосов
/ 24 января 2011

Я создаю элемент управления вкладками с поддержкой Ajax в MVC 2: Ajax.BeginForm. По какой-то причине он работает в Safari и Firefox нормально, но когда я загрузил его в IE8, браузер загрузил возврат метода Ajax (действие контроллера) на всю страницу (т. Е. Как при отправке без ajax).

Надбавка:

<% using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "tabContent"})) { %>
<ul id="tabnav">
    <li id="TabOne"><a href="#" onclick="updateTab(event)">Tab 1</a></li>
    <li id="TabTwo"><a href="#" onclick="updateTab(event)">Tab 2</a></li>
    <li id="TabThree"><a href="#" onclick="updateTab(event)">Tab 3</a></li>
    <%: Html.Hidden("tabId") %>
</ul>
<% } %>
<div id="tabContent"></div>

Вот код JavaScript:

function updateTab(evt) {
    var $target = $(evt.target);
    var selectedTabId = $target.parent().attr('id');

    $('#tabId').val(selectedTabId);

    // submit the form AJAXly
    $target.closest('form').submit();

    // hide the current content
    $('#tabContent').empty();

    // update the selected tab
    $('#tabnav li').removeClass('currentTab');
    $('#' + selectedTabId).addClass('currentTab');

    // suppress default link action
    return false;
}

Контроллер:

    [HttpPost]
    public ActionResult Index(string tabId)
    {
        ViewData["tabId"] = tabId;

        // redirect to the selected tab
        return RedirectToAction("Index", tabId);
    }

1 Ответ

1 голос
/ 24 января 2011

То есть вы используете jQuery и у вас еще есть те Ajax.* помощники, которые работают с устаревшей структурой MSAjax?Я бы не стал.Вы можете взглянуть на превосходные вкладки jquery UI , которые сделают ваш код намного проще:

<ul id="tabnav">
    <li id="TabOne"><%= Html.ActionLink("Tab 1", "Tab1") %></li>
    <li id="TabTwo"><%= Html.ActionLink("Tab 2", "Tab2") %></li>
    <li id="TabThree"><%= Html.ActionLink("Tab 3", "Tab3") %></li>
</ul>
<div id="tabContent"></div>

, а затем:

$(function() {
    $('#tabnav').tabs({
        load: function(event, ui) {
            $('a', ui.panel).click(function() {
                $('#tabContent').load(this.href);
                return false;
            });
        }
    });
});

и в вашемКонтроллер: у вас должны быть действия контроллера, соответствующие каждой вкладке, которые будут возвращать частичный HTML, который будет введен в tabContent div с использованием AJAX.

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