2012-05-23 41 views
1

我使用jquery ajax調用控制器動作(請參閱下面的代碼),執行動作後,引發了無效的Json錯誤。我注意到它會返回頁面內容。爲什麼會發生。任何人都可以幫我解決這個問題嗎?無效的Json數據返回頁面內容

控制器

[HttpGet] 
     public ActionResult ViewDetails(int id) 
     { 
      var eventsdetails = _service.GeteventByID(id); 
      return View("EventDetails",eventsdetails); 
     } 


     [HttpPost] 
     public ActionResult UpdateAnswers(string answers, string question, string controlid, int eventid) 
     { 
      var replacetext=string.Empty; 
      if (answers.Length>0) 
      replacetext = answers.Replace("\n", ","); 
      _service.UpdateAnswers(eventid, replacetext, controlid); 
      return RedirectToAction("ViewDetails", new { id = eventid }); 
     } 

的Javascript

function dropdownlist(controlid, title, answers, eventid) { 
      var $answersreplaced = answers.replace(/\,/g , " \r"); 
      var $deleteDialog = $('<div><textarea id="answerlist" rows="10" cols="50">' + $answersreplaced + '</textarea><div><div style="font-size:9px">(To change back to an open answer field, delete all choices above and save)</div>'); 
      $deleteDialog.dialog({ 
       resizable: false, 
       height: 280, 
       width: 350, 
       title: title + " - Edit Choices", 
       modal: true, 
       buttons: { 
        "Save": function() { 
         $.ajax({ 
          type: 'POST', 
          url: '@Url.Action("UpdateAnswers")', 
          dataType: 'json', 
          data: { answers: $('#answerlist').val(), 
           question: title, 
           controlid: controlid, 
           eventid: eventid 
          }, 
          success: function (result) { 
           $(this).dialog("close"); 
           alert(result); 
          }, 
          error: function (xhr, ajaxOptions, thrownError) { 
           alert(thrownError); 
           // alert('there was a problem saving the new answers, please try again'); 
          } 
         }); 
        }, 
        Cancel: function() { 
         $(this).dialog("close"); 
        } 
       } 
      }); 
     }; 

回答

1

這是因爲你沒有從動作返回JsonResult,你重定向到另一個動作,這又返回的ViewResult。

嘗試這樣:

[HttpPost] 
public ActionResult UpdateAnswers(string answers, string question, string controlid, int eventid) 
{ 
    var replacetext=string.Empty; 
    if (answers.Length>0) 
     replacetext = answers.Replace("\n", ","); 
    _service.UpdateAnswers(eventid, replacetext, controlid); 
    var eventsdetails = _service.GeteventByID(eventid); 
    return Json(eventdetails); 
} 
+0

謝謝,但是當我返回一個JasonResult時,我遇到了內部服務器錯誤,從中我不知道如何弄清楚,因爲錯誤是非常具體的。有任何想法嗎? – user335160

+0

使用谷歌瀏覽器並查看控制檯/網絡選項卡,它應該更詳細地解釋錯誤 – CallumVass

+0

好的,謝謝,我會讓你知道結果。 – user335160

0

你在你的AJAX請求和你UpdateAnswers控制器動作內指定dataType: 'json'return RedirectToAction這顯然重定向到ViewDetails作用,這反過來又返回一個視圖這又是HTML。所以這沒有意義。

您必須從UpdateAnswers控制器操作返回Json而不是重定向。

+0

謝謝,但是當我返回一個JasonResult時,我遇到了一個內部服務器錯誤,由此我不知道如何弄清楚,因爲錯誤非常具體。有任何想法嗎? – user335160

+0

是的,在AJAX請求中查看FireBug以查看有關錯誤消息的詳細信息。你應該學會調試你的代碼。您也可以嘗試在控制器操作中放置斷點並查看它是否被擊中。 –

+0

好的,謝謝,我會讓你知道結果。 – user335160