適當

2010-04-21 46 views
2

Ajax.BeginForm返回結果,並顯示數據我有一個頁面,如下所示:適當

<% using (Ajax.BeginForm("AddAnswer","Marketplace",new AjaxOptions() {HttpMethod = "POST" })){ %> 

AddAnswer行動增加了一些數據,以分貝。我想要做的是:當成功添加回答時,附加#answers div與傳遞給控制器​​的當前答案。當答案尚未成功添加到數據庫 - 我想在#errors div顯示適當的錯誤。我怎樣才能做到這一點?

回答

5

這裏就是我可以建議:

控制器:

[HttpPost] 
public ActionResult AddAnswer(string Value) 
{ 
    // TODO: Try to insert the answer value into the database 
    // and return a JSON object that contains the attempted value 
    // and an error message if necessary 
    return Json(new { Answer = Value, ErrorMessage = "" }); 
} 

查看:

<% using (Ajax.BeginForm("AddAnswer", "Home", 
     new AjaxOptions { HttpMethod = "POST", OnSuccess = "success" })) { %> 
    <%= Html.TextBoxFor(x => x.Value) %> 
    <input type="submit" value="Add answer" /> 
<% } %> 

<div id="errors"></div> 
<div id="answers"></div> 

<script type="text/javascript"> 
    function success(arg) { 
     var obj = arg.get_response().get_object(); 
     // I apologize for the ugliness that follows, I don't know MS Ajax 
     // but this might written better: 
     if (obj.ErrorMessage === '') { 
      var answer = document.createElement('div'); 
      answer.appendChild(document.createTextNode(obj.Answer)); 
      document.getElementById('answers').appendChild(answer); 
     } else { 
      document.getElementById('errors').innerHTML = obj.ErrorMessage; 
     } 
    } 
</script> 
+0

'arg.get_response()。get_object();'不適合我。我不明白爲什麼這不是返回json對象。 – Peter 2013-12-30 18:46:15

+0

@Wale,也許是因爲我在2010年4月22日編寫了這個答案,當時Microsoft AJAX腳本是在ASP.NET MVC中執行AJAX的方式,現在是2013年(即將於2014年),並且您正在使用一些更新版本的ASP .NET MVC(如4或5)Ajax。*幫助程序使用jQuery不顯眼的Ajax,其語法完全不同? – 2013-12-30 22:15:06

+0

你很對。我是MVC的新手,我不知道區別。 – Peter 2014-01-02 10:27:13

0

我想添加到Darin的答案評論,但由於某種原因,我不能。 基本上,OnSuccess和OnFailure事件不驗證模型,它們只是驗證AJAX調用是否成功,它是否到達控制器並且返回時沒有任何錯誤。 因此,如果你想從控制器發送錯誤消息,你需要像Darin所說的那樣發送一個json對象並在onSuccess事件中處理它。 你實際上可以發送一個List> < string>,並在後面的javascript中生成一個HTML列表,或者你需要的任何東西。