2010-04-14 3 views

ответ

3

для частичного зрения, не проблема:

public static class ExtensionMethods 
{ 
    public static string RenderPartialToString(this ControllerBase 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(); 
    } 
} 

использования в контроллере:

public string GetLocationHighlites() 
    { 
     // get the model from the repository etc.. 
     return this.RenderPartialToString("PartialViewName", model); 
    } 

не уверен, об использовании для «нормального» зрения, так как он не будет ссылаться на VP. LoadControl(). однако я уверен, что у кого-то будет такой же код, который требуется для того, чтобы сделать то же самое с «нормальным» представлением.

надеюсь, что это частичное рассмотрение поможет вам на данный момент.

jim

+2

Это решение работает с частицами, которые не имеют места для запроса в поле «Запрос» внутри файла ascx. Если они есть - «Запрос не доступен в этом контексте», генерируется исключение. Обходным путем для этого было бы изменение ссылок «Запрос» на «HttpContext.Current.Request». Я все еще ищу более простой и менее грязный способ частичного просмотра строки в MVC2 – PanJanek

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