0

我需要将部分视图呈现为字符串,并且我正在尝试将 C# 示例转换为 VB.Net,因为我在这个项目中坚持使用它。

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

  1. ObjectViewData - 我不知道那是什么
  2. RenderPartial 是一个子,但似乎被用作一个函数 - 我不明白

我引用了 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

替代文字

4

4 回答 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。

于 2009-06-11T13:36:24.103 回答
0

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

编辑:你的代码也有

View() 

在......的最后

Public Function MakeStringForMe() 

这应该是

Return View()

作为对第 2 点的响应,代码没有使用 renderPartial 子程序,而是使用了 RenderPartialToString 函数。

高温高压

OneSHOT

于 2009-06-11T13:07:46.387 回答
0

RenderPartialToString 需要返回一个字符串,s

于 2009-06-11T13:35:53.993 回答
0

我最喜欢的转换器可以在这个链接中找到

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

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

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

于 2009-06-11T15:24:06.573 回答