Как добавить script в частичное представление в MVC4?

Это код, который у меня есть в моем частичном представлении

@model Contoso.MvcApplication.Models.Exercises.AbsoluteArithmetic

@using(Html.BeginForm())
{
<div>
    <span style="width: 110px; float:left; text-align:center; font-size:2.5em;">@Model.Number1</span>
    <span style="width: 110px; float:left; text-align:center; font-size:2.5em;">+</span>
    <span style="width: 110px; float:left; text-align:center; font-size:2.5em;">@Model.Number2</span>
    <span style="width: 110px; float:left; text-align:center; font-size:2.5em;">=</span>
    <span>
            @Html.EditorFor(model => model.Result)
            @Html.ValidationMessageFor(model => model.Result)
    </span>
</div>
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Обратите внимание, что в конце моего кода у меня есть @section, и я понял, что он не работает, если я установил там точку останова. Если я перемещаю эту строку в _Layout.cshtml, она работает хорошо, но это не идея.

Как я могу показать MVC4 в частичном бритве, что я хочу добавить эту библиотеку?

Ответ 1

Вы не можете отображать разделы макета из частичного. Переместите определение раздела на родительскую страницу или макет.

Ответ 2

Вы можете использовать @Scripts.Render("~/Scripts/my-script.js") для файлов .js и @Styles.Render("~/Content/my-Stylesheet.css") для файлов css.

Nb: он работает и для конкретного пакета. Подробнее - 'http://www.asp.net/mvc/overview/performance/bundling-and-minification'

он работает на любых подстраницах в бритве, включая частичные виды. для получения дополнительной информации google для использования этих помощников

Ответ 3

Посмотрите мой ответ Как отредактировать раздел в частичном представлении, который позволяет вам определять сценарии и стили в любом представлении/частичном представлении. Он также заботится о дублировании.

Мой личный подход заключается в том, что разделы не являются хорошим решением для стилей и javascript.

Ответ 4

Нет общего решения для этой проблемы, но вы можете сделать следующие простейшие способы:

1) Вы можете создать набор методов расширения следующим образом:

fooobar.com/questions/27543/...

2) Просто переместите свои javascript-коды в отдельный частичный вид и на своем основном представлении, сделайте 2 частичных вида. Один для основного частичного просмотра, а другой для ваших сценариев:

{
    // markup and razor code for Main View here

    @Html.Partial("Main_PartialView")
}

@section Scripts
{
    @Html.Partial("JavaScript_PartialView")
}

Надеюсь, что это поможет.

Ответ 5

Это сработало для меня, позволяя мне комбинировать JavaScript и HTML для частичного просмотра в одном файле для удобства чтения.

В представлении, в котором используется Partial View, называемый "_MyPartialView.cshtml"

<div>
    @Html.Partial("_MyPartialView",< model for partial view>,
            new ViewDataDictionary { { "Region", "HTMLSection" } } })
</div>

@section scripts{

    @Html.Partial("_MyPartialView",<model for partial view>, 
                  new ViewDataDictionary { { "Region", "ScriptSection" } })

 }

В файле с частичным представлением

@model SomeType

@{
    var region = ViewData["Region"] as string;
}

@if (region == "HTMLSection")
{


}

@if (region == "ScriptSection")
{
        <script type="text/javascript">
    </script">
}

Ответ 6

Эта страница Stackoverflow предоставила полное решение этого вопроса: Использование разделов в шаблонах редактора/дисплея

TL; DR: просто добавьте пакет Forloop.HtmlHelpers nuget https://www.nuget.org/packages/Forloop.HtmlHelpers/ в свой проект, чтобы вы могли запускать Javascript из Razor Partial Представления и шаблоны в ASP.NET MVC. Я лично использовал это с моим проектом MVC 5.

Ответ 7

Вы можете добавить script непосредственно в конец частичного представления html без раздела script (поскольку раздел script не отображается в частичных представлениях)

<script language="javascript">
   // Your scripts here
   // ....
</script>