48 votes

Quelle est la différence entre "return View ()" et "return PartialView ()"

Je comprends que les vues partielles sont utilisées pour rendre certaines parties d’une vue. Mais je ne comprends pas quelle est la différence entre return View() et return PartialView() et quand utilisez-vous chacun d'entre eux.

26voto

alexfreiria Points 21515

De retour View() - Rend une .aspx|.cshtml page

  • Le rend normal .page aspx qui peuvent aussi contenir des Vues Partielles

De Retour PartialView() - Rend .ascx|.cshtml de Contrôle

  • Rend un segment de code HTML au navigateur qui peut être demandée via AJAX ou Non des requêtes AJAX semblables.

Afficher() renvoie ViewResult PartialView() renvoie PartialViewResult les deux hériter d' ViewResultBase

La différence est décrite par un Réflecteur ci-dessous...

public class PartialViewResult : ViewResultBase
{
   // Methods
   protected override ViewEngineResult FindView(ControllerContext context)
   {
      ViewEngineResult result = base.ViewEngineCollection.FindPartialView(context, base.ViewName);
      if (result.View != null)
      {
         return result;
      }
      StringBuilder builder = new StringBuilder();
      foreach (string str in result.SearchedLocations)
      {
         builder.AppendLine();
         builder.Append(str);
      }
      throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, MvcResources.Common_PartialViewNotFound, new object[] { base.ViewName, builder }));
   }
}


public class ViewResult : ViewResultBase
{
   // Fields
   private string _masterName;

   // Methods
   protected override ViewEngineResult FindView(ControllerContext context)
   {
      ViewEngineResult result = base.ViewEngineCollection.FindView(context, base.ViewName, this.MasterName);
      if (result.View != null)
      {
         return result;
      }
      StringBuilder builder = new StringBuilder();
      foreach (string str in result.SearchedLocations)
      {
         builder.AppendLine();
         builder.Append(str);
      }
      throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, MvcResources.Common_ViewNotFound, new object[] { base.ViewName, builder }));
   }

   // Properties
   public string MasterName
   {
      get
      {
         return (this._masterName ?? string.Empty);
      }
      set
      {
         this._masterName = value;
      }
   }
}

17voto

mare Points 5236

retour PartialView() renvoie fragment de code HTML et elle est utilisée avec ViewUserControls - ASCX fichiers. Le principal avantage de l'utilisation de "retour PartialView ()", c'est quand vous ne voulez pas de rendre toutes les autres page HTML choses, comme le HTML, le CORPS, les balises d'en-TÊTE.

L'une des utilisations les plus courantes par moi, c'est quand je veux le rendre juste l'utilisateur le contrôle sur la base de savoir si la demande d'une action est appel AJAX.

J'ai donc une Vue appelée MyControl.aspx où j'utilise RenderPartial helper HTML et j'ai une Vue partielle nommé MyControl.ascx où je fais le rendu réel.

Je peux passer entre ces deux-là en mon contrôleur de l'action comme ceci:

if (Request.IsAjaxRequest())
    return PartialView("MyControl"); // this renders MyControl.ascx

return View(); // this render MyControl.aspx

2voto

Jonas H Points 4917

Une action du contrôleur renvoie généralement un PartialView lorsque AJAX est utilisé et une mise à jour de la région de page représentée par la vue partielle est effectuée. La manière habituelle d'utiliser des vues partielles consiste simplement à appeler Html.RenderPartial dans votre vue principale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X