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 pouvoir placer cette vue partielle n’importe où sur le site, donc il a besoin de son propre contrôleur. Je suis en train de rendre le partiel comme tel

@Html.Partial("_Testimonials") 

    Pourquoi ne pas utiliser Html.RenderAction() ?

    Ensuite, vous pouvez mettre les éléments suivants dans n’importe quel contrôleur (même en créant un nouveau contrôleur):

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

    Ensuite, vous pouvez créer une nouvelle vue partielle et faire de PartialViewModel ce dont il hérite.

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

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

    Pour WebFormsViewEngine, cela ressemblerait à ceci:

     <% Html.RenderAction("Index", "Home"); %> 

    Si c’était moi, je créerais simplement un nouveau contrôleur avec une action unique, puis utiliserais RenderAction à la place de Partial:

     // Assuming the controller is named NewController @{Html.RenderAction("ActionName", "New", new { routeValueOne = "SomeValue" }); } 

    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.

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

     public ActionResult _YourPartialViewSection() { return PartialView(); } 

    Vous n’avez pas besoin d’un contrôleur et lorsque vous utilisez .Net 5 (MVC 6), vous pouvez rendre la vue partielle asynchrone

     @await Html.PartialAsync("_LoginPartial") 

    ou

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

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

      

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

    Pour être plus proche de WebForm UserControl (* .ascx), vous devez:

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

    2. Placez votre modèle partiel en tant que propriété dans votre page Modèle

    3. Dans la vue de la page, utilisez Html.EditorFor (m => m.MyPartialModel)
    4. Créer une vue partielle appropriée
    5. Créez une classe très similaire à celle de Child Action Controller décrite ici dans les réponses à plusieurs resockets. Mais ce ne sera qu’une classe (héritée de Object plutôt que de Controller). Appelons-le MyControllerPartial. MyControllerPartial ne connaîtra que le modèle partiel.
    6. Utilisez votre MyControllerPartial dans votre contrôleur de page. Transmettre model.MyPartialModel à MyControllerPartial
    7. Prenez soin du préfixe approprié dans votre MyControllerPartial. Exemple Fox: ModelState.AddError (“MyPartialModel.” + “SomeFieldName”, “Error”)
    8. Dans MyControllerPartial, vous pouvez valider et implémenter 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); ... } } 

    PS À l’étape 3, vous pouvez utiliser Html.Partial (“PartialViewName”, Model.MyPartialModel, ). Pour plus de détails, voir Vues partielles ASP.NET MVC: préfixes de nom d’entrée