Website openantrag.de
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OpenAntrag/OpenAntragLib/Extensions/ControllerExtensions.vb

70 lines
2.6 KiB

Imports System.IO
Imports System.Runtime.CompilerServices
Imports System.Web.Mvc
''' <summary>
''' Controller extension class that adds controller methods
''' to render a partial view and return the result as string.
''' http://blog.janjonas.net/2011-06-18/aspnet-mvc3-controller-extension-method-render-partial-view-string
''' Based on http://craftycodeblog.com/2010/05/15/asp-net-mvc-render-partial-view-to-string/
''' </summary>
Public Module ControllerExtensions
''' <summary>
''' Renders a (partial) view to string.
''' </summary>
''' <param name="controller">Controller to extend</param>
''' <param name="viewName">(Partial) view to render</param>
''' <returns>Rendered (partial) view as string</returns>
<Extension()> _
Public Function RenderPartialViewToString(controller As Controller, viewName As String) As String
Return controller.RenderPartialViewToString(viewName, Nothing)
End Function
''' <summary>
''' Renders a (partial) view to string.
''' </summary>
''' <param name="controller">Controller to extend</param>
''' <param name="viewName">(Partial) view to render</param>
''' <param name="model">Model</param>
''' <returns>Rendered (partial) view as string</returns>
<Extension()> _
Public Function RenderPartialViewToString(controller As Controller, viewName As String, model As Object) As String
If String.IsNullOrEmpty(viewName) Then
viewName = controller.ControllerContext.RouteData.GetRequiredString("action")
End If
controller.ViewData.Model = model
Dim strRetVal As String = ""
Using sw = New StringWriter()
Try
Dim viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName)
Dim viewContext = New ViewContext(controller.ControllerContext,
viewResult.View,
controller.ViewData,
controller.TempData,
sw)
viewResult.View.Render(viewContext, sw)
strRetVal = sw.GetStringBuilder().ToString().CleanHtmlCode
Catch ex As Exception
'Throw New Exception("Fehler beim Rendern vom " & viewName)
Dim cei As New CustomErrorInfo With {.ErrorMessage = "Fehler bei der Darstellung von '" & viewName & "'"}
strRetVal = controller.RenderPartialViewToString("_ErrorBoxPartial", cei)
End Try
End Using
Return strRetVal
End Function
End Module