2010-04-11 6 views
0

Мне нужно визуализировать частично вид на строку в действии контроллера. У меня есть следующий пример кода, но ControllerContext. ParentActionViewContext, кажется, не существует в MVC 1.0asp.net mvc 1.0 - как визуализировать частичный вид в виде строки

  // Get the IView of the PartialView object. 
      var view = PartialView("MyPartialView").View; 

      // Initialize a StringWriter for rendering the output. 
      var writer = new StringWriter(); 

      // Do the actual rendering. 
      view.Render(ControllerContext.ParentActionViewContext, writer); 

Любые советы очень ценятся.

+0

http://stackoverflow.com/questions/2537741/how-to-render-partial-view-into-a-string – Jarek

ответ

1

попробовать (метод расширения, который я использую) это MVC v1.0

public static class Extensionmethods 
{ 
    public static string RenderPartialToString(this Controller controller, string partialName) 
    { 
     return RenderPartialToString(controller, partialName, new object()); 
    } 
    public static string RenderPartialToString(this Controller controller, string partialName, object model) 
    { 
     var vd = new ViewDataDictionary(controller.ViewData); 
     var vp = new ViewPage 
     { 
      ViewData = vd, 
      ViewContext = new ViewContext(), 
      Url = new UrlHelper(controller.ControllerContext.RequestContext) 
     }; 

     ViewEngineResult result = ViewEngines 
            .Engines 
            .FindPartialView(controller.ControllerContext, partialName); 

     if (result.View == null) 
     { 
      throw new InvalidOperationException(
      string.Format("The partial view '{0}' could not be found", partialName)); 
     } 
     var partialPath = ((WebFormView)result.View).ViewPath; 

     vp.ViewData.Model = model; 

     Control control = vp.LoadControl(partialPath); 
     vp.Controls.Add(control); 

     var sb = new StringBuilder(); 

     using (var sw = new StringWriter(sb)) 
     { 
      using (var tw = new HtmlTextWriter(sw)) 
      { 
       vp.RenderControl(tw); 
      } 
     } 
     return sb.ToString(); 
    } 
} 

использование:

.... 
string htmlBlock = this.RenderPartialToString("YourPartialView", model); 
return htmlBlock; 

я использую это в тонне контроллеров с 100% успеха ...

jim

Смежные вопросы