تحويل C # إلى VB.NET - باستخدام BlockRender MVCContrib لتقديم طريقة عرض جزئية إلى سلسلة

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

سؤال

أحتاج إلى تقديم Partialview إلى سلسلة، وأنا أحاول تحويل مثال C # إلى VB.NET، كما أنا عالق مع ذلك لهذا المشروع.

هذا يسبب لي صداع من هذين المشكلتين:

  1. OfficeViewData - لا أستطيع معرفة ما هو
  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

alt text

هل كانت مفيدة؟

المحلول

هذا الخط:

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

ألقيت نظرة على التقاط وتوقع إجراء ما هو مجرد مندوب، ويبدو أنه لا يمكن للمترجم أن يستنتج توقيع المندوب على التفاف الوظيفة المجهولة. لذلك سوف نعطيها يد المساعدة ولف لامدا أنفسنا.

نصائح أخرى

يمكنك أن تفعل ذلك يدويا أو حاول استخدام http://www.developerfusion.com/tools/convert/csharp-to-vb/

تحرير: أيضا التعليمات البرمجية الخاصة بك

View() 

في نهاية

Public Function MakeStringForMe() 

هذا ينبغي أن يكون

Return View()

استجابة للإشارة 2 لا يستخدم الرمز الفرعي RenderPartial، فإنه يستخدم وظيفة RenderPartialTostring.

هذر

ضربة واحدة

يحتاج renderpartialtostostring إلى إرجاع سلسلة، S

يمكن العثور على محول المفضل في هذا الرابط

السبب هو المفضل لدي هو أنه يمكن استخدامه "دون اتصال" - وهذا ليس كذلك هُم صفحة ويب. يتعرض المحول كخدمة ويب، وهناك نموذج التعليمات البرمجية (في C #) للإشارة إليها.

قمت بتنزيل نموذج التعليمات البرمجية الخاصة بهم وتكييفها للقراءة والكتابة من نظام الملفات. جعل تحويل كل أكثر بساطة أكثر بساطة ....

<تحرير> أعرف أن الرابط لا يذهب بالفعل ل المحول - يذهب إلى صفحة "حول"، مع روابط من هناك إلى صفحة المحول وإلى نموذج التعليمات البرمجية تنزيل. أيضا، يجب علي أن أذكر أنه محول ثلاثي الحيازات (VB، C # و Boo)، ثنائي الاتجاه بين أي لغتان </ edit>

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top