将C#转换为VB.Net - 使用MVCContrib Blockrenderer将部分视图呈现给字符串

问题描述 投票:0回答:4

我需要渲染一个字符串的局部视图,我正在尝试将一个C#示例转换为VB.Net,因为我坚持使用该项目。

这让我对这两个问题感到头疼:

  1. ObjectViewData - 我无法弄清楚那是什么
  2. RenderPartial是一个sub,但似乎用作函数 - 我不明白

我引用了MVCContrib.UI,所以我不需要转换它。但是这两个函数,我确实需要转换:

(来自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();
 }

这是我尝试将其转换为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

alt text

c# asp.net-mvc vb.net mvccontrib
4个回答
2
投票

这一行:

Dim s As String = blockRenderer.Capture(RenderPartialExtensions.RenderPartial(h, UserControl, viewData))

不等于您的原始行:

string s = blockRenderer.Capture(
         () => RenderPartialExtensions.RenderPartial(h, userControl, viewData)
     );

C#示例使用lambda,而VB示例只是直接调用方法,而不返回值。编译器不是骗你的。

试试这个:

Dim s = blockRender.Capture(New Action(Of String)(Function() RenderPartialExtensions.RenderPartial(h, UserControl, viewData)))

我看了一下Capture,它期待一个Action只是一个委托,看起来编译器无法推断委托的签名来包装匿名函数。所以我们会帮助它并自己包裹lambda。


0
投票

你可以手动完成或尝试使用http://www.developerfusion.com/tools/convert/csharp-to-vb/

编辑:你的代码也有

View() 

在......的最后

Public Function MakeStringForMe() 

这应该是

Return View()

响应第2点,代码没有使用renderPartial sub,而是使用RenderPartialToString函数。

HTH

单稳


0
投票

RenderPartialToString需要返回一个字符串s


0
投票

我最喜欢的转换器可以在this link找到

它是我最喜欢的原因是它可以“离线”使用 - 也就是说,不是在他们的网页上。转换器作为Web服务公开,并且有示例代码(在C#中)来引用它。

我下载了他们的示例代码并将其调整为从文件系统读取和写入。转换变得更加简单....

<edit>我知道链接实际上没有转到转换器 - 它转到“关于”页面,从那里到转换器页面和示例代码下载的链接。另外,我应该提一下,这是一个三角转换器(VB,C#和Boo),任意两种语言之间双向</ edit>

© www.soinside.com 2019 - 2024. All rights reserved.