2013-08-20 13 views

risposta

30

Assolutamente, mettere il seguente metodo in un controller condiviso o una classe helper. Si restituirà la vista renderizzata in HTML, l'utilizzo è di per sé explainatory:

public static string RenderViewToString(ControllerContext context, string viewName, object model) 
    { 
     if (string.IsNullOrEmpty(viewName)) 
      viewName = context.RouteData.GetRequiredString("action"); 

     var viewData = new ViewDataDictionary(model); 

     using (var sw = new StringWriter()) 
     { 
      var viewResult = ViewEngines.Engines.FindPartialView(context, viewName); 
      var viewContext = new ViewContext(context, viewResult.View, viewData, new TempDataDictionary(), sw); 
      viewResult.View.Render(viewContext, sw); 

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

U fantastico genio! :) –

+0

@Leo Nix Come dovrei creare l'argomento di contesto? Ho provato a inizializzare un'istanza ma non conosco l'argomento ControllerBase del suo costruttore. – Hosein

+0

non è necessario crearne uno se lo si utilizza nel contesto di un'azione del controllore: ControllerContext è una proprietà del controller quindi basta passarlo. Https://goo.gl/pp5AkR –

6

non so se le migliori pratiche o no, ma se u lasciato così com'è

return PartialView("_Product", model) 

poi Hai chiamato il metodo usando ajax

$.ajax ({ 
    type: "POST", 
     url: _url, 
     data: _data, 
     success: function (result) { 
      // the result is the returned html from the partial view 
     } 
})