Comment créer un contrôleur et un modèle individuels pour une vue partielle? Je veux pouvoir placer cette vue partielle n'importe où sur le site afin qu'il ait besoin de son propre contrôleur. Je suis en cours rendant le partiel comme si
@Html.Partial("_Testimonials")
Pourquoi ne pas utiliser Html.RenderAction()
?
Vous pouvez ensuite mettre les éléments suivants dans n’importe quel contrôleur (même en créant un nouveau contrôleur):
[ChildActionOnly]
public ActionResult MyActionThatGeneratesAPartial(string parameter1)
{
var model = repository.GetThingByParameter(parameter1);
var partialViewModel = new PartialViewModel(model);
return PartialView(partialViewModel);
}
Vous pouvez ensuite créer une nouvelle vue partielle et faire en sorte que votre PartialViewModel
soit ce dont elle 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 partiel:
// 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 de n'importe quelle page. Assurez-vous simplement que le chemin relatif est correct.
Vous n’avez pas besoin d’un contrôleur et lorsque vous utilisez .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 simplement utiliser :
<partial name="Shared/_ProductPartial.cshtml"
for="Product" />
Le plus important est que l’action créée doit renvoyer une vue partielle, voir ci-dessous.
public ActionResult _YourPartialViewSection()
{
return PartialView();
}
Html.Action est une technologie mal conçue . Parce que dans votre contrôleur de page, vous ne pouvez pas recevoir les résultats du calcul dans votre contrôleur partiel. Le flux de données est uniquement Contrôleur de page => Contrôleur partiel.
Pour être plus proche de WebForm UserControl (* .ascx), vous devez:
Créer un modèle de page et un modèle partiel
Placez votre modèle partiel en tant que propriété dans votre page
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.Partial ("PartialViewName", Model.MyPartialModel, <clone_ViewData_with_prefix_MyPartialModel>). Pour plus de détails, voir Vues partielles ASP.NET MVC: préfixes de nom d'entrée