Comment puis-je charger une vue partielle dans la vue

Je suis très confus avec cette vue partielle...

Je veux charger une vue partielle dans ma vue principale ...

Voici le simple exemple...

Je charge L'Index.cshtml de L'action D'Index Homecontroller en tant que page principale..

Dans l'index.cshtml je crée un lien via

@Html.ActionLink("load partial view","Load","Home")

Dans HomeController, j'ajoute une nouvelle Action appelée

public PartialViewResult Load()
{
    return PartialView("_LoadView");
}

Dans _LoadView.cshmtl je viens d'avoir un

<div>
    Welcome !!
</div>

Mais, lors de l'exécution du projet, indexez.CSHTML rend en premier et me montre le lien "charger la vue partielle"... lorsque je clique sur cela, il va à la nouvelle page instade de rendu du message de bienvenue de _LoadView.cshtml dans l'index.cshtml.

Qu'est-ce qui ne va pas?

Note: Je ne veux pas charger la page via AJAX ou Je ne veux pas utiliser Ajax.ActionLink

61
demandé sur radbyx 2011-09-04 00:56:24

8 réponses

Si vous voulez charger la vue partielle directement dans la vue principale, vous pouvez utiliser l'Assistant Html.Action:

@Html.Action("Load", "Home")

Ou si vous ne voulez pas passer par L'action Load, utilisez le hepler HtmlPartial:

@Html.Partial("_LoadView")

Si vous souhaitez utiliser Ajax.ActionLink, remplacer votre Html.ActionLink, avec:

@Ajax.ActionLink(
    "load partial view", 
    "Load", 
    "Home", 
    new AjaxOptions { UpdateTargetId = "result" }
)

Et bien sûr, vous devez inclure un holder dans votre page où le partiel sera affiché:

<div id="result"></div>

N'oubliez pas non plus d'inclure:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

Dans votre vue principale afin d'activer Ajax.* aides. Et assurez - vous que JavaScript discret est activé dans votre web.config (il devrait être par défaut):

<add key="UnobtrusiveJavaScriptEnabled" value="true" />
134
répondu Darin Dimitrov 2011-09-03 21:19:13

J'ai eu exactement le même problème que Leniel. J'ai essayé des corrections suggérées ici et une douzaine d'autres endroits. La chose qui a finalement fonctionné pour moi était simplement d'ajouter

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")

À ma mise en page...

15
répondu Scott 2013-07-06 16:16:31

Si vous le faites avec un @Html.ActionLink(), le chargement de PartialView est géré comme une requête normale lorsque vous cliquez sur un élément d'ancrage, c'est-à-dire charger une nouvelle page avec la réponse de la méthode PartialViewResult.
Si vous voulez le charger immédiatement, alors vous utilisez @Html.RenderPartial("_LoadView") ou @Html.RenderAction("Load").
Si vous voulez le faire sur userinteraction (c'est-à-dire en cliquant sur un lien), vous devez utiliser AJAX --> @Ajax.ActionLink()

5
répondu Major Byte 2011-09-03 21:17:45

Pour moi, cela a fonctionné après avoir téléchargé la bibliothèque discrète AJAX via NuGet:

 Search and install via NuGet Packages:   Microsoft.jQuery.Unobtrusive.Ajax

Que d'ajouter dans la vue les références à jQuery et AJAX discrètes:

@Scripts.Render("~/bundles/jquery")
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"> </script>

À Côté de l'Ajax ActionLink et le div ont été nous voulons rendre les résultats:

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" }
)

<div id="toUpdate"></div>
5
répondu Stefan Vlad 2015-01-05 14:08:46

Petit tweek à ce qui précède

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    "ControlerName",
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" }
)

<div id="toUpdate"></div>
1
répondu 3d cad consultant 2015-02-21 19:15:37

RenderParital est préférable d'utiliser pour les performances.

{@Html.RenderPartial("_LoadView");}
1
répondu maxspan 2016-07-01 05:44:40

Si vous voulez remplir le contenu de votre vue partielle dans votre vue, vous pouvez utiliser

@Html.Partial("PartialViewName")

Ou

{@Html.RenderPartial("PartialViewName");}

Si vous voulez faire une demande de serveur et traiter les données, puis retourner la vue partielle à la vue principale remplie de ces données, vous pouvez utiliser

...
    @Html.Action("Load", "Home")
...

public PartialViewResult Load()
{
    return PartialView("_LoadView");
}

Si vous voulez que l'utilisateur clique sur le lien et ensuite remplir les données de vue partielle, vous pouvez utiliser:

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    "ControlerName",
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" }
)
0
répondu Jaimin Dave 2017-03-15 04:21:19

UNE CHOSE À SAVOIR - ET JE SUIS TOMBÉ EN FAUTE DE CELA...

jquery.validate.unobtrusive.js
jquery.validate.unobtrusive.min.js

NE SONT PAS LES MÊMES QUE...

jquery.unobtrusive-ajax.js
jquery.unobtrusive-ajax.min.js

J'ai lu "discret" et supposé que j'avais la bonne bibliothèque-les AJAX sont nécessaires!

-1
répondu Dave 2016-11-29 13:26:48