0

Darin Dimitrov的这个答案是一个很好的解决方案,可以将 javascript 放入部分视图但让它们在以后呈现。

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

扩大

@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.

4

2 回答 2

1

在这里。我想到了一种解决方案,即使用 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
于 2013-07-26T03:41:11.457 回答
0

为什么不使用命名部分来定义要在每个局部视图中呈现的 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>
}
于 2013-07-26T03:50:18.670 回答