为OnSuccess,OnFailure,OnComplete和OnBegin提供回调参数时使用Ajax.BeginForm时出错

时间:2011-06-14 17:49:35

标签: javascript asp.net-mvc asp.net-ajax

我正在尝试使用Ajax表单,每当我向任何AjaxOptions属性提供回调方法时,我都会收到此错误。

  

Microsoft JScript运行时错误:对象不支持此属性或方法

如果我没有为任何属性(OnSuccess,OnFailure,OnComplete或OnBegin)提供回调函数,则不会发生错误,并且表单会正确发布。

这是我的代码。

<% using (Ajax.BeginForm("someAction", "SomeController", new AjaxOptions() {
        HttpMethod="POST",
        UpdateTargetId = "feedbackMsg",
        OnSuccess = "ShowConfirmationMessage"
    }))
{ %>

我的javascript代码就是这个。

function ShowConfirmationMessage(xhr) { alert(xhr);}

当我提供OnSuccess方法时,代码会像这样呈现。

<form action="/Review/SaveQualityScore" 
    method="post" 
    onclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));" 
    onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), 
        { 
            insertionMode: Sys.Mvc.InsertionMode.replace, 
            httpMethod: &#39;POST&#39;, 
            updateTargetId: &#39;feedbackMsg&#39;, 
            onSuccess: Function.createDelegate(this, ShowConfirmationMessage) 
        });"
>

我猜测Function.createDelegate是个问题。因为当我删除OnSuccess属性时,function.CreateDelegate不会被渲染,一切正常。

无论如何,我在这里疯了,任何帮助都会受到赞赏。谢谢!

2 个答案:

答案 0 :(得分:4)

确保包含以下脚本:

  • MicrosoftAjax.js
  • MicrosoftMvcAjax.js

答案 1 :(得分:2)

或者更好......如果您使用MVC 3,请务必包含jquery.unobtrusive-ajax.js。它会渲染出你的表单标签清理器。

此外,您可能不希望同时包含UpdateTargetId和OnSuccess。我花了3个小时搞清楚,如果我的控制器正在返回json,如果我在Ajax.BeginForm中定义UpdateTargetId,我的onsuccess javascript回调函数永远不会被命中。