我已将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.
答案 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>
}