2012-11-23 81 views
0

產生在C#和MVC序列化對象和HTML,響應與jQuery製作一個Ajax調用,我想送,作爲響應,一個對象,它會包含一個List<int>和一些html代碼,用我寫的HtmlHelperExtension生成。如何發送JSON響應Ajax調用,從的HtmlHelper

以前,我只是發回HTML,所以我是在一個局部視圖渲染HtmlHelper並將其返回。但是現在我想創建一個包含2個屬性的對象,列表和一個表示html的字符串,然後在Json中對該對象進行序列化並將其發送回來以響應ajax調用。

但似乎,與使用黑客的例外,它是不可能的,不建議在控制器中使用HtmlHelper

我也在考慮忘記htmlHelper的事情,只是在一個類中呈現我的html代碼,這將是我當前的HtmlHelper的確切副本。

您是否認爲有一種方法可以將控制器中的List<int>與從HtmlHelper返回的html放在一個對象中,並將其序列化爲將它發送回javascript中的ajax調用?

謝謝!

回答

1

MVC並不支持視圖到字符串,它只是返回它。但是,您可以創建一個自定義控制器,並使用允許的方法。我在互聯網上的某個地方挑選了這些代碼 - 無法回想起它在哪裏 - 它的工作非常出色。

public class ExtendedController : Controller 
{ 
    public string RenderPartialView(string viewName, object model) 
    { 
     if (string.IsNullOrEmpty(viewName)) 
      viewName = this.ControllerContext.RouteData.GetRequiredString("action"); 

     this.ViewData.Model = model; 
     using (var sw = new StringWriter()) 
     { 
      ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(this.ControllerContext, viewName); 
      var viewContext = new ViewContext(this.ControllerContext, viewResult.View, this.ViewData, this.TempData, sw); 
      viewResult.View.Render(viewContext, sw); 

      return sw.GetStringBuilder().ToString(); 
     } 
    } 
} 

,然後創建控制器

public class MyController : ExtendedController 
{ 
    public ActionResult MyAjaxOp() 
    { 
     List<int> MyList = new List<int>(); // Populate the list as required 
     object MyHelperModel = new object(); // View Model as required 
     object rtn = new { html = RenderPartialView("MyHelperView", MyHelperModel), list = MyList} 
     return Json(rtn, JsonRequestBehavior.AllowGet); 
    } 
} 

這將允許你在渲染視圖放入一個字符串,並將其傳遞到客戶端。

以上是未經測試的示例代碼,因此請修改您的要求。

+0

不錯,這個作品很棒!謝謝。 –