2011-01-24 85 views
0

我正在用MVC 2的Ajax支持進行標籤導航控制:Ajax.BeginForm。出於某種原因,它可以在Safari和Firefox中正常工作,但是當我在IE8中加載它時,瀏覽器會將Ajax方法(控制器操作)返回到整個頁面(即執行非Ajax提交)。ASP.NET MVC 2 Ajax在IE8中不起作用,但在Safari和Firefox中工作

加價:

<% 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

那麼,你是使用jQuery,而且還有那些Ajax.*助手與工作過時的MSAjax框架?我不會。你可能會看一看優秀jquery UI tabs這將使你的代碼,以便更簡單:

<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; 
      }); 
     } 
    }); 
}); 

,並在你的控制器,你將有對應於每個標籤這將控制器動作使用AJAX返回將被注入tabContent div的部分HTML。

相關問題