Convertir C # pour VB.Net - Utiliser MvcContrib Blockrenderer pour rendre une vue partielle à une chaîne
-
13-09-2019 - |
Question
Je dois rendre un PartialView à une chaîne, et je suis en train de convertir un exemple C # pour VB.Net, comme je suis coincé avec ce pour ce projet.
Cela me cause un mal de tête de ces deux problèmes:
- ObjectViewData - Je ne peux pas comprendre ce qui est
- RenderPartial est un sous, mais semble être utilisé en fonction - Je ne l'obtenir
Je référence à la MVCContrib.UI, donc je ne pas besoin de le convertir. Mais ces deux fonctions, je ne doivent convertir:
(de brightmix. com )
/// Static Method to render string - put somewhere of your choosing
public static string RenderPartialToString(string userControl, object viewData, ControllerContext controllerContext)
{
HtmlHelper h = new HtmlHelper(new ViewContext(controllerContext, new WebFormView("omg"), null, null), new ViewPage());
var blockRenderer = new BlockRenderer(controllerContext.HttpContext);
string s = blockRenderer.Capture(
() => RenderPartialExtensions.RenderPartial(h, userControl, viewData)
);
return s;
}
/// Your Controller method...
public ActionResult MakeStringForMe()
{
var objectViewData = new objectViewData { SomeString = "Dude", SomeNumber = 1 };
string s = RenderPartialToString("~/Views/Controls/UserControl.ascx", objectViewData, this.ControllerContext);
View();
}
Voici ma tentative de convertir en VB.Net
'Static Method to render string - put somewhere of your choosing'
Public Shared Function RenderPartialToString(ByVal userControl As String, ByVal viewData As Object, ByVal controllerContext As ControllerContext) As String
Dim h As New HtmlHelper(New ViewContext(controllerContext, New WebFormView("omg"), Nothing, Nothing), New ViewPage())
Dim blockRenderer As New MvcContrib.UI.BlockRenderer(controllerContext.HttpContext)
Dim s As String = blockRenderer.Capture(RenderPartialExtensions.RenderPartial(h, UserControl, viewData))
End Function
Public Function MakeStringForMe() As ActionResult
Dim objectViewData As objectViewData = New objectViewData With {.SomeString = "Dude", .SomeNumber = 1}
Dim s As String = RenderPartialToString("~/Views/Controls/UserControl.ascx", objectViewData, Me.ControllerContext)
View()
End Function
La solution
Cette ligne:
Dim s As String = blockRenderer.Capture(RenderPartialExtensions.RenderPartial(h, UserControl, viewData))
ne correspond pas à votre ligne originale:
string s = blockRenderer.Capture(
() => RenderPartialExtensions.RenderPartial(h, userControl, viewData)
);
L'exemple C # utilise un lambda, alors que l'exemple VB est simplement appeler la méthode directement, qui ne retourne pas de valeur. Le compilateur n'est pas vous mentir.
Essayez ceci:
Dim s = blockRender.Capture(New Action(Of String)(Function() RenderPartialExtensions.RenderPartial(h, UserControl, viewData)))
Je pris un coup d'œil à la capture et il est attend une action qui est juste un délégué, et il semble que le compilateur ne peut pas déduire la signature du délégué pour envelopper la fonction anonyme. Donc, nous allons le donner un coup de main et envelopper le lambda nous.
Autres conseils
Vous pouvez le faire manuellement ou essayez d'utiliser http: // www. developerfusion.com/tools/convert/csharp-to-vb/
EDIT: également votre code a
View()
à la fin de
Public Function MakeStringForMe()
doit être
Return View()
En réponse au point 2 du code n'utilise le sous renderPartial il utilise la fonction RenderPartialToString.
HTH
Oneshot
RenderPartialToString doit retourner une chaîne, s
Mon favori convertisseur peut être trouvé à ce lien
La raison pour laquelle il est mon préféré est qu'il peut être utilisé « hors ligne » - c'est pas leur page web. Le convertisseur est exposé en tant que service web, et il y a des exemples de code (en C #) pour faire référence.
Je leur code téléchargé exemple et adapté pour lire et écrire à partir du système de fichiers. Fait une conversion tout beaucoup plus simple ....