Convertir C # pour VB.Net - Utiliser MvcContrib Blockrenderer pour rendre une vue partielle à une chaîne

StackOverflow https://stackoverflow.com/questions/980947

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:

  1. ObjectViewData - Je ne peux pas comprendre ce qui est
  2. 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

Était-ce utile?

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 ....

Je sais que ce lien ne va pas en fait le convertisseur - il va à une page « about », avec des liens à partir de là vers la page de conversion et à l'exemple de code télécharger . Je dois mentionner prob'ly que c'est un convertisseur à trois cornes (VB, C # et Boo), bidirectionnelle entre deux langues

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top