0

私は部分ビューを文字列にレンダリングする必要があり、このプロジェクトで立ち往生しているため、C# の例を VB.Net に変換しようとしています。

これにより、次の2つの問題が頭を悩ませています。

  1. ObjectViewData - それが何かわかりません
  2. RenderPartial はサブですが、関数として使用されているようです-わかりません

MVContrib.UI を参照しているので、変換する必要はありません。しかし、これらの 2 つの関数は、変換する必要があります。

( 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# の例ではラムダを使用していますが、VB の例では値を返さないメソッドを直接呼び出すだけです。コンパイラは嘘をついていません。

代わりにこれを試してください:

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

Capture を調べたところ、単なるデリゲートである Action が期待されています。コンパイラはデリゲートの署名を推測して匿名関数をラップできないようです。そのため、助けの手を差し伸べて、ラムダを自分でラップします。

于 2009-06-11T13:36:24.103 に答える
0

RenderPartialToString は文字列を返す必要があります。

于 2009-06-11T13:35:53.993 に答える
0

私のお気に入りのコンバーターは、このリンクにあります

私のお気に入りの理由は、「オフライン」で使用できることです。つまり Web ページではありません。コンバーターは Web サービスとして公開されており、それを参照するサンプル コード (C#) があります。

サンプル コードをダウンロードし、ファイル システムから読み書きできるように調整しました。変換がずっと簡単になりました....

< 編集 > リンクが実際にコンバーターに移動しないことはわかっています。「about」ページに移動し、そこからコンバーター ページとサンプル コードのダウンロードへのリンクが表示されます。また、これは 3 つの角を持つコンバーター (VB、C#、および Boo) であり、任意の 2 つの言語間で双方向に動作することを言及する必要があります < /edit>

于 2009-06-11T15:24:06.573 に答える
0

手動で行うか、http://www.developerfusion.com/tools/convert/csharp-to-vb/を使用してみてください

編集:あなたのコードにもあります

View() 

の終わりに

Public Function MakeStringForMe() 

これはあるべきです

Return View()

ポイント 2 に対応して、コードは renderPartial サブルーチンを使用しておらず、RenderPartialToString 関数を使用しています。

HTH

ワンショット

于 2009-06-11T13:07:46.387 に答える