2015-09-26 87 views
10

我有一個ASP.NET MVC項目,我想將文章發佈到數據庫,然後在頁面上顯示文章的片段。當用戶評論時,我還想在保存到數據庫後顯示評論。我爲此使用AJAX,並在這兩種情況下調用OnFailureOnSuccess方法。ASP.NET MVC頁面在使用AJAX時未更新

OnFailure方法只在保存帖子而不是註釋時觸發(這是因爲即使保存成功,頁面也不會更新)。根本沒有調用OnSuccess方法,這是因爲我的頁面沒有更新。

我使用jQuery的2.1.4,並有jquery.unobtrusive阿賈克斯腳本在我的項目

這裏是我的代碼加載。

//查看創建後

@using (Ajax.BeginForm("Create", "Post", 
new AjaxOptions 
{ 
    HttpMethod = "POST", 
    UpdateTargetId = "insertnewpostbelow", 
    InsertionMode = InsertionMode.InsertAfter, 
    OnSuccess = "postingSucceeded()", 
    OnFailure = "postingFailed()" 
})) 
{ 
    //View code left out 
} 

//服務器端保存後和更新PartialView

[HttpPost, ValidateAntiForgeryToken, ValidateInput(false)] 
    public async Task<PartialViewResult> Create 
     ([Bind(Include = "ID,Title,Message,PostedOn,isAbuse,By")] Post post) 
    { 
     if (ModelState.IsValid) 
     { 
      var list = new List<Post>(); 
      list.Add(post); 

      try 
      { 
       db.Posts.Add(post); 
       await db.SaveChangesAsync(); 

       return PartialView("_Posts", list); 
      } 
      catch (RetryLimitExceededException) 
      { 
       ModelState.AddModelError("", "Unable to login, please try again and contact administrator if the problem persists."); 

       //If we got this far, model has errors. 
       ViewBag.By = new SelectList(db.Members, "ID", "FullNames", post.By); 
       return PartialView("_Posts", post); 
      } 
     } 

     //If we got this far, model has errors. 
     ViewBag.By = new SelectList(db.Members, "ID", "FullNames", post.By); 
     return PartialView("_Posts", post); 
    } 

//我的JavaScript文件

function postingSucceeded() { 
    alert("Posting succeeded."); 
} 

function postingFailed() { 
    alert("Posting failured."); 
} 

//部分。查看更新

<div id="big-posts"> 
     <span id="insertnewpostbelow"></span> 

     @Html.Partial("_Posts", Model.Posts) 
    </div> 

我錯過了什麼,在此先感謝。

+1

您不需要ajax.beginform參數中的括號,它應該是'OnSuccess =「postingSucceeded」,OnFailure =「postingFailed」' –

+0

謝謝@AlexArt指出。然而,在更改代碼後,我的問題不是固定的 – Dev

+0

您是否也可以分享您的部分視圖。 – MstfAsan

回答

4

這是因爲你有一個Ajax表格_PostsPartialView。在放置之後,比如在<span id="insertnewpostbelow"></span>之後,您需要再次運行jquery.unobtrusive-ajax

請注意,腳本將在頁面加載時呈現,而不是在頁面發生任何更改後(如更新PartialView)。

解決方案:調用腳本再次,頁面更新:)

4

後,您需要把返回的局部視圖的內容某處的頁面

<div id="big-posts"> 
    <span id="insertnewpostbelow"></span> 
    <div id="newPost"></div> 
</div> 

上的回調函數嘗試:

function postingSucceeded(data) { 
    $("#newPost").html(data); 
} 

希望這有助於!

2

你不需要有括號

OnSuccess = "postingSucceeded()" 
          ^^^ 

OnFailure = "postingFailed()" 
         ^^^ 

只是

OnSuccess = "postingSucceeded", 
OnFailure = "postingFailed" 

現在HTML代碼

<div id="big-posts"> 
    <span id="insertnewpostbelow"></span> 
    <div id="AppendPostsHere"></div> 
</div> 

JAV第一件事ascript代碼出方$(document).ready(....)

function postingSucceeded(newPosts) { 
    $("#AppendPostsHere").html(newPosts); 
} 

希望這種預訂購工作!

相關問題