web-dev-qa-db-fra.com

Comment ajouter un script dans une vue partielle dans MVC4?

C'est le code que j'ai dans ma vue partielle

@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")
}

S'il vous plaît noter au bas de mon code, j'ai un @section, et je me suis rendu compte qu'il ne fonctionne pas si je définir un point d'arrêt à cet endroit. Si je déplace cette ligne dans _Layout.cshtml, cela fonctionne bien, mais ce n'est pas l'idée.

Comment puis-je dire à MVC4 dans une vue partielle du rasoir que je veux ajouter cette bibliothèque?

36
Darf Zon

Vous pouvez utiliser @Scripts.Render("~/Scripts/my-script.js") pour les fichiers .js et @Styles.Render("~/Content/my-Stylesheet.css") pour les fichiers css.

Nb: cela fonctionne aussi pour un paquet particulier. Plus de détails - ' http://www.asp.net/mvc/overview/performance/bundling-and-minification '

cela fonctionne sur toutes les sous-pages de rasoir, y compris les vues partielles . pour plus d'informations google pour l'utilisation de ces aides

11
Nishanth Shaan

Vous ne pouvez pas rendre les sections de mise en page à partir d'un partiel. Déplacez la définition de section vers la page parente ou la mise en page.

8
viperguynaz

Découvrez ma réponse Comment rendre une section dans une vue partielle , qui vous permet de définir des scripts et des styles dans n'importe quelle vue/vue partielle. Il prend également en charge les doublons.

Mon point de vue personnel est que les sections ne sont pas une bonne solution pour les styles et javascript includes.

5
Erik Philips

Il n’existe pas de solution commune à ce problème, mais vous pouvez procéder de la manière la plus simple qui soit:

1) Vous pouvez créer un ensemble de méthodes d’extension comme suit:

https://stackoverflow.com/a/6671766/5208058

2) Il vous suffit de déplacer vos codes javascript dans une vue partielle séparée et, dans votre vue principale, d'afficher 2 vues partielles. Une pour la vue partielle principale et l'autre pour vos scripts, comme suit:

{
    // markup and razor code for Main View here

    @Html.Partial("Main_PartialView")
}

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

J'espère que ça aide.

4
Varan Sinayee

Vous pouvez ajouter le script directement à la fin de la vue partielle html, sans section de script (car la section de script n'est pas rendue dans les vues partielles)

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

Cela a fonctionné pour moi en me permettant de colocaliser JavaScript et HTML pour une vue partielle dans le même fichier pour faciliter la lisibilité.

Dans la vue qui utilise la vue partielle appelée " _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" } })

 }

En vue partielle fichier 

@model SomeType

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

@if (region == "HTMLSection")
{


}

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

Cette page Stackoverflow apportait une solution complète à cette question: Utilisation de sections dans Editeur/Modèles d'affichage

TL; DR: Ajoutez simplement le paquet nuget Forloop.HtmlHelpers https://www.nuget.org/packages/Forloop.HtmlHelpers/ à votre projet pour vous permettre d’exécuter du Javascript à partir de vues partielles et de modèles Razor dans ASP. NET MVC. Je l'ai personnellement utilisé avec mon projet MVC 5.

0
James Porter

Si vous souhaitez inclure des scripts spécifiques uniquement dans certaines vues partielles et éviter de les répartir inutilement dans votre application, vous pouvez procéder de la manière suivante:

Définissez un ensemble pointant vers un fichier javascript vide dans votre BundleConfig.cs:

 bundles.Add(new ScriptBundle("~/bundles/empty").Include(
                    "~/Scripts/empty.js"
            ));

Dans la section head de votre _Layout.cshtml, ajoutez cette variable:

@{
        ViewBag.AdditionalBundle = String.IsNullOrEmpty(ViewBag.AdditionalBundle) ? "~/bundles/empty" : ViewBag.AdditionalBundle;
    }

Dans la partie inférieure de votre _Layout.cshtml, indiquez les ensembles supplémentaires souhaités:

@Scripts.Render("~/bundles/lib")
    @Scripts.Render(@ViewBag.AdditionalBundle);
    @RenderSection("scripts", required: false)

Et enfin, dans la vue partielle dans laquelle vous avez besoin de scripts spécifiques, ajoutez simplement le paquet correspondant à la variable:

ViewBag.AdditionalBundle = "~/bundles/mySpecificBundle";

Les vues partielles sont rendues avant le _Layout.cshtml, vous avez donc besoin de cette vérification en haut du fichier. Cela ressemble à ceci: si une vue partielle attribue une valeur à ViewBag.AdditionalBundle, utilisez-la. Sinon, rendez un script vide.

0
Glauber