Ajax.BeginForm不会调用onSuccess

时间:2011-09-02 09:03:09

标签: jquery asp.net-mvc asp.net-mvc-3 asp.net-ajax

在ASP.NET MVC 3应用程序中,我使用Ajax.BeginForm将写入的文本发布到控制器。

@using (Ajax.BeginForm("Post", "Forum", new {threadId = Model.Thread.Id  }, new AjaxOptions { OnSuccess = "PostReply" }))
{
    <div id="reply-area">
        <h3 style="border-bottom:1px solid black">POST REPLY</h3>

        <span id="post-error" class="error-message"></span>
        <textarea rows="1" cols="1" id="post-textarea" name="Content">    </textarea>

         <input type="submit" class="button" value="Submit"/>

     </div>
}

在控制器中我有

 [HttpPost]
 public ActionResult Post(int threadId,PostModel model)
 {
     bool Success = false;
     if (ModelState.IsValid)
     {
        Success=Unit.ForumFacade.CreatePost(Unit.ForumFacade.GetThreadByID(threadId), model.Content,  CurrentUserId);
        if (Success == true) return View("PostSuccess");
    }

    return Json("fsdfds");
}

在javascript中我有这个

function PostReply(isRequestSuccessed) {
    alert("asdasd");
    if (isRequestSuccessed==false) {
        $("#post-error").html("Please Try Again");
    }
    else
    {
        $("#post-error").html("");
    }
}

问题是Javascript的功能没有触发并且没有警报,我的浏览器(Firefox)返回弹出窗口以下载application / json文件。 这有什么不对?

4 个答案:

答案 0 :(得分:20)

确保您已将以下脚本包含在您的页面中:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

并且您已在web.config中启用了不显眼的javascript:

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

这使Ajax.*辅助工具Ajax.BeginForm起作用。

答案 1 :(得分:3)

感谢&#34; Darin Dimitrov&#34;和his answer指出了很多关于这一点。但只是添加它,我知道这可能很简单,但这让我,

我的错误是我想的

jquery.validate.unobtrusive.js

 jquery.unobtrusive-ajax.js

在他们不是的时候也是如此。确保使用&#34; jquery.unobtrusive-ajax.js&#34;发现于Nuget。

Microsoft.jQuery.Unobtrusive.Ajax

答案 2 :(得分:0)

当你给表单一个Id然后将提交事件附加到一个单独的javascript文件(使用jQuery)并处理那里的帖子时,这是一个更好的解决方案

HTML:

@using (Ajax.BeginForm("Post", "Forum", new {threadId = Model.Thread.Id  }, new {id = "formid" }))
{
 ...

使用Javascript:

$("#formid").submit(function (e) {
    e.preventDefault();
    if ($(this).valid()) {
        $.ajax({
            type: "POST",
            url: $(this).attr('action'),
            data: $(this).serialize(),
            success: function (result) {
                //do your success logic
            }
        });
    }
});

答案 3 :(得分:0)