2013-07-26 3 views
0

This answer от Darin Dimitrov - отличное решение для помещения javascript в частичные виды, но с последующим их рендерингом.Как преобразовать этот код Razor из C# в VB.NET?

Я преобразовал расширения 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.

ответ

0

OP здесь. Я подумал о одном решении, которое должно использовать помощников Razor.

Расширения

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 

Razor (Partial)

@Html.Script(Javascript) 

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

Razor (_layout)

@Html.RenderScripts 
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> 
} 
+0

Partials не могут использовать секции, это цель этого кода. –

Смежные вопросы