2011-01-19 30 views
64

有沒有辦法從MVC返回一個HTML字符串作爲JSON響應的一部分?MVC返回部分視圖爲JSON

public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      if(Request.IsAjaxRequest() 
       return PartialView("NotEvil", model); 
      return View(model) 
     } 
     if(Request.IsAjaxRequest()) 
     { 
      return Json(new { error=true, message = PartialView("Evil",model)}); 
     } 
     return View(model); 
    } 

回答

102

您可以從中提取PartialViewResult對象中的HTML字符串,類似回答這個線程:

Render a view as a string

PartialViewResult和的ViewResult無論從ViewResultBase派生,所以同樣的方法應該從事的都。

從上面的線程使用的代碼,你將能夠使用:與其RenderViewToString

public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     if(Request.IsAjaxRequest()) 
      return PartialView("NotEvil", model); 
     return View(model) 
    } 
    if(Request.IsAjaxRequest()) 
    { 
     return Json(new { error = true, message = RenderViewToString(PartialView("Evil", model))}); 
    } 
    return View(model); 
} 
+6

omg render view to string!我從來不知道這一點。 O.O – 2012-04-06 20:23:34

+0

如果它是一個調用ReturnSpecialJsonIfInvalid的ajax調用,我相信它會返回數據。 jquery如何將視圖與json區分開來? – mko 2014-09-15 10:22:58

28

我更喜歡

return Json(new { Url = Url.Action("Evil", model) }); 

一個方法,那麼你可以趕上結果在JavaScript並做類似

success: function(data) { 
    $.post(data.Url, function(partial) { 
     $('#IdOfDivToUpdate').html(partial); 
    }); 
}