如何将此Razor代码从C#转换为VB.NET?

时间:2013-07-26 03:24:06

标签: asp.net-mvc asp.net-mvc-4 razor html-helper

This answer Darin Dimitrov是一个很好的解决方案,可以将javascript放入部分视图中,但稍后会将其渲染。

我已将HtmlHelper扩展转换为VB.NET但我不知道如何将它们与Razor一起使用。

Extension

@Html.Script(@<script></script>)

Expression expected.

@Html.Script(@:<script></script>)

Expression expected.

@Code
    Html.Script(@<script></script>)
End Code

Expression expected.

Syntax error.

@Code
    Html.Script(@:<script></script>)
End Code

Expression expected.

2 个答案:

答案 0 :(得分:1)

OP在这里。我想到了一个使用Razor Helpers的解决方案。

<强>扩展

Namespace Helpers.Extensions

    Public Module HtmlHelperExtensions

        <Extension>
        Public Function Script(helper As HtmlHelper, result As HelperResult) As MvcHtmlString
            helper.ViewContext.HttpContext.Items("_script_" & Guid.NewGuid.ToString) = result
            Return MvcHtmlString.Empty
        End Function

        <Extension>
        Public Function RenderScripts(helper As HtmlHelper) As IHtmlString
            helper.ViewContext.Writer.WriteLine("<script type=""text/javascript"">")
            For Each key As Object In helper.ViewContext.HttpContext.Items.Keys
                If (key.ToString.StartsWith("_script_")) Then
                    Dim result As HelperResult =
                        DirectCast(helper.ViewContext.HttpContext.Items(key), HelperResult)
                    If result IsNot Nothing Then
                        helper.ViewContext.Writer.Write(result)
                    End If
                End If
            Next
            helper.ViewContext.Writer.WriteLine("</script>")
            Return MvcHtmlString.Empty
        End Function

    End Module

End Namespace

剃刀(部分)

@Html.Script(Javascript)

@Helper Javascript()
@<text>
alert("It works");
</text>
End Helper

剃刀(_Layout)

@Html.RenderScripts

答案 1 :(得分:0)

为什么不使用named sections来定义要在每个局部视图中呈现的JavaScript?感觉您正在尝试复制已存在的此功能。

设置您希望在布局中呈现脚本的位置。然后,您可以选择在每个部分视图中指定其他脚本。

主视图/布局

<body>
...
  <script type="text/javascript" src="@Url.Content("/Scripts/GlobalScript.js")">
  @RenderSection("Javascript", required: false)
</body>

部分视图

@section Javascript
{
  <script type="text/javascript" src="@Url.Content("/Scripts/ScriptRequiredByThisPartial.js")"></script>
}