2011-04-27 106 views
2

我裏面PartialView像這樣的Ajax.ActionLink問題與Ajax.ActionLink AjaxOptions回調(ASP.NET MVC 3)

@Ajax.ActionLink(Model.IsVisible ? "Disable" : "Enable", "ToggleVisibility", "Review", new { area = "Admin", id = Model.Id }, new AjaxOptions { HttpMethod = "POST", OnComplete = "onComplete_AdminReviewOption" }) 

而且處理JavaScript函數(聲明在線主視圖現在):

function onComplete_AdminReviewOption(ajaxContext) { 
    var jsonObject = ajaxContext.get_object(); 
} 

會拋出一個JavaScript錯誤:

Object# has not definition for get_object() .

第I這些JavaScript方法應該是MicrosoftAjax.js/MicrosoftMvcAjax.js腳本的一部分,這兩個腳本都包含在我的頁面中。

任何人都可以確認哪些庫這些助手方法存在?

我在我的Layout.cshtml文件中加載了所需的腳本,然後我做了一個AJAX調用來呈現上面的PartialView。

因此,當我處理該功能,圖書館已經加載 - 這就是爲什麼im混淆。

任何想法?

回答

2

看起來你正在使用ASP.NET MVC 3和Razor。在這個版本中,jQuery是默認的客戶端腳本框架。沒有更多MicrosoftAjax.js(感謝上帝)。所以:

function onComplete_AdminReviewOption(ajaxContext) { 
    var jsonObject = eval(ajaxContext); 
} 

也別忘了包括jquery.unobtrusive-ajax.js

如果你想在你的web.config設置以下使用傳統的東西,你可以:

<add key="UnobtrusiveJavaScriptEnabled" value="false" /> 

默認情況下,該變量設置爲true。

我個人更喜歡使用標準鏈接:

@Html.ActionLink(
    Model.IsVisible ? "Disable" : "Enable", // <-- this should probably be as a property directly in the view model, ex. Model.LinkText 
    "ToggleVisibility", 
    "Review", 
    new { area = "Admin", id = Model.Id }, 
    new { id = "myLink" } 
) 

和AJAXify他們在一個單獨的JavaScript文件使用jQuery:

$(function() { 
    $('#myLink').click(function() { 
     $.post(this.href, function(result) { 
      // result is already a javascript object, no need to eval 
     }); 
     return false; 
    }); 
}); 
+0

啊哈!所以我不知道MS AJAX腳本現在被認爲是「遺留的」。當然 - 我更喜歡jQuery - 但我想我會給MS Ajax幫手一個去,因爲它似乎有一個豐富的客戶端API。明天早上將試用jQuery方式。鏈接文字也很棒。 – RPM1984 2011-04-27 08:11:38

+0

與上面的技巧一樣,HTTP GET(通過HREF)將在click函數之前發生,所以點擊函數將永遠不會發生,因爲URL將會404(因爲它是'[HttpPost]'操作方法)。我想我需要將href設置爲'#'。思考? – RPM1984 2011-04-28 00:02:09

+0

@ RPM1984在鏈接的點擊事件處理程序中包含了返回false語句,並且還在事件處理程序中放置了一個警報,以查看它是否已正確註冊。對於HTTP Post而言,Darin正在使用jQuery的$ .post方法,通過post發送ajax請求,所以不會出現 – 2011-04-28 04:29:44