Créer un contrôleur pour une vue partielle dans ASP.NET MVC

comment créer un contrôleur individuel et un modèle pour une vue partielle? Je veux être en mesure de placer cette vue partielle n'importe où sur le site, donc il a besoin de son propre contrôleur. Je me suis rendu partiel comme

@Html.Partial("_Testimonials")
54
demandé sur brenjt 2011-06-09 05:00:51

6 réponses

pourquoi ne pas utiliser Html.RenderAction() ?

alors vous pouvez mettre ce qui suit dans n'importe quel contrôleur (même en créant un nouveau contrôleur pour lui):

[ChildActionOnly]
public ActionResult MyActionThatGeneratesAPartial(string parameter1)
{
    var model = repository.GetThingByParameter(parameter1);
    var partialViewModel = new PartialViewModel(model);
    return PartialView(partialViewModel); 
}

Ensuite, vous pouvez créer une nouvelle vue partielle et votre PartialViewModel ce qu'il hérite.

pour Razor, le bloc de code dans la vue ressemblerait à ceci:

@{ Html.RenderAction("Index", "Home"); }

pour le WebFormsViewEngine, il semblerait comme ceci:

<% Html.RenderAction("Index", "Home"); %>
96
répondu George Stocker 2014-11-19 02:42:53

si c'était moi, je créerais simplement un nouveau contrôleur avec une seule Action et j'utiliserais alors RenderAction à la place de Partial:

// Assuming the controller is named NewController
@{Html.RenderAction("ActionName", 
                     "New", 
                      new { routeValueOne = "SomeValue" });
}
9
répondu Justin Niessner 2015-07-15 13:27:41

Il n'a pas besoin de son propre contrôleur. Vous pouvez utiliser

@Html.Partial("../ControllerName/_Testimonials.cshtml")

cela vous permet de rendre le partiel à partir de n'importe quelle page. Assurez-vous simplement que le chemin relatif est correct.

8
répondu Slick86 2015-02-03 19:29:57

la chose la plus importante est que l'action créée doit retourner une vue partielle, voir ci-dessous.

public ActionResult _YourPartialViewSection()
{
    return PartialView();
}
2
répondu Wen Chen 2015-09-30 13:46:40

vous n'avez pas besoin de contrôleur et en utilisant .Net 5 (MVC 6) Vous pouvez rendre la vue partielle async

@await Html.PartialAsync("_LoginPartial")

ou

@{await Html.RenderPartialAsync("PartialName");}

ou si vous utilisez .net core 2.1 > vous pouvez juste utiliser :

<partial name="Shared/_ProductPartial.cshtml"
         for="Product" />
2
répondu GoldenAge 2018-09-05 15:01:40

Html.L'Action est une technologie mal conçue. Parce que dans votre Controller de page vous ne pouvez pas recevoir les résultats du calcul dans votre Controller partiel. Le flux de données est seulement le contrôleur de Page = > le contrôleur partiel.

Pour être au plus près WebForm UserControl (*.ascx) vous devez:

  1. créer un modèle de page et un modèle partiel

  2. Placez votre Modèle Partiel comme une propriété dans votre Modèle de page

  3. dans la vue de page utilisez le Html.EditorFor (m => M. MyPartialModel)
  4. créer une vue partielle appropriée
  5. créer une classe très similaire à ce contrôleur D'Action pour enfants décrit ici dans les réponses à de nombreuses reprises. Mais ce sera juste une classe (héritées de l'Objet plutôt que de Contrôleur). Appelons-le MyControllerPartial. MyControllerPartial ne connaîtra Qu'un modèle partiel.
  6. Use votre MyControllerPartial dans votre contrôleur de page. Passer du modèle.MyPartialModel to MyControllerPartial
  7. prenez soin du bon préfixe dans votre MyControllerPartial. Exemple de Fox: ModelState.AddError ("MyPartialModel."+ "SomeFieldName", "Erreur")
  8. dans MyControllerPartial vous pouvez faire la validation et mettre en œuvre d'autres logiques liées à ce modèle partiel

Dans cette situation, vous pouvez l'utiliser comme:

public class MyController : Controller
{
    ....
    public MyController()
    {
    MyChildController = new MyControllerPartial(this.ViewData);
    }

    [HttpPost]
    public ActionResult Index(MyPageViewModel model)
    {
    ...
    int childResult = MyChildController.ProcessSomething(model.MyPartialModel);
    ...
    }
}

P. S. À l'étape 3, Vous pouvez utiliser Html.Partielle("PartialViewName", Modèle.MyPartialModel, < clone_ViewData_with_prefix_MyPartialmodel>). Pour plus de détails, voir ASP.NET MVC vues partielles: entrée préfixes de nom

0
répondu Yury Shpakov 2018-08-30 18:31:51