2011-09-02 59 views
5

在ASP.NET MVC 3應用程序我用Ajax.BeginForm後所著文字控制器。Ajax.BeginForm不調用的onSuccess

@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的功能不發射和isntead警報,我的瀏覽器(Firefox )讓我彈出下載應用程序/ json文件。 這裏有什麼問題?

+2

請參閱本 http://stackoverflow.com/questions/5061063/mvc-3-ajax-beginform-does-a-full-post-back – Sreekumar

回答

19

確保你已經包括下面的腳本到你的頁面:

<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

謝謝,我忘了附加jquery.unobtrusive-ajax.js)))) –

+0

謝謝達林。我幾乎沒有了只瘋狂地發現,共享視圖我用是缺少jquery.unobtrusive-ajax.js參考。 – Shenaniganz

+1

您可以從https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/下載jquery.unobstrusive-ajax.js –

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

在這種情況下,你可以使用'HTML。BeginForm'版本 – ps2goat

3

感謝「達林季米特洛夫」和his answer指出了很多關於這一點。但是,僅僅增加了它,我知道這可能是簡單的,但是這讓我,

我的錯誤是,我認爲

jquery.validate.unobtrusive.js 

jquery.unobtrusive-ajax.js 

在相同的時候都沒有。請確保您使用的NuGet發現了「jquery.unobtrusive-ajax.js」。

Microsoft.jQuery.Unobtrusive.Ajax

相關問題