2011-09-02 28 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> 
} 

(Firefoxの私は

[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ないということである持っています)私はアプリケーション/ 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

ありがとうダーリン。私が使用していたShared Viewにjquery.unobtrusive-ajax.jsの参照がないことを知るために、ほとんど狂ってしまった。 – Shenaniganz

+1

https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/ –

0

それはあなたのフォームにイドを与えるし、HTML

が(jQueryのを使用して)、別のJavaScriptファイル内のイベントを提出し、ポストを扱う接続すると非常に良くソリューションです:

@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

"Darin Dimitrov"とhis answerに感謝します。しかし、それに追加して、私は、これは単純なことかもしれません知っているが、これは私を得た、

私のミスは私が

jquery.validate.unobtrusive.js 

jquery.unobtrusive-ajax.js 

同じそうでないときを考えたということでした。 Nugetにある "jquery.unobtrusive-ajax.js"を必ず使用してください。

Microsoft.jQuery.Unobtrusive.Ajax

関連する問題