vista una que parcial net mvc component asp asp.net asp.net-mvc partial-views

una - Crear controlador para vista parcial en ASP.NET MVC



que es una vista parcial mvc (6)

¿Cómo puedo crear un controlador y modelo individual para una vista parcial? Quiero poder ubicar esta vista parcial en cualquier parte del sitio, así que necesita su propio controlador. Estoy actualizando el parcial como tal

@Html.Partial("_Testimonials")


¿Por qué no usar Html.RenderAction() ?

Luego, puede poner lo siguiente en cualquier controlador (incluso creando un nuevo controlador para él):

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

Luego, podría crear una nueva vista parcial y hacer que PartialViewModel sea ​​de lo que hereda.

Para Razor, el bloque de código en la vista se vería así:

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

Para WebFormsViewEngine, se vería así:

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


Html.Action es una tecnología mal diseñada. Debido a que en su Controlador de página no puede recibir los resultados del cálculo en su Controlador Parcial. El flujo de datos es solo Controlador de página => Controlador parcial.

Para estar más cerca de WebForm UserControl (* .ascx), necesita:

  1. Crear una página Modelo y un modelo parcial

  2. Coloque su modelo parcial como una propiedad en su página Modelo

  3. En la vista de la página use Html.EditorFor (m => m.MyPartialModel)
  4. Crea una vista parcial apropiada
  5. Cree una clase muy similar a ese Controlador de Acción Infantil descrito aquí en respuestas muchas veces. Pero será solo una clase (heredada de Object en lugar de Controller). Vamos a nombrarlo como MyControllerPartial. MyControllerPartial solo sabrá sobre el Modelo parcial.
  6. Use su MyControllerPartial en su controlador de página. Pase el modelo. MyPartialModel a MyControllerPartial
  7. Tenga cuidado con el prefijo correcto en su MyControllerPartial. Ejemplo de Fox: ModelState.AddError ("MyPartialModel." + "SomeFieldName", "Error")
  8. En MyControllerPartial puede validar e implementar otras lógicas relacionadas con este Modelo Parcial

En esta situación, puedes usarlo como:

public class MyController : Controller { .... public MyController() { MyChildController = new MyControllerPartial(this.ViewData); } [HttpPost] public ActionResult Index(MyPageViewModel model) { ... int childResult = MyChildController.ProcessSomething(model.MyPartialModel); ... } }

PS En el paso 3 puede usar Html.Partial ("PartialViewName", Model.MyPartialModel, <clone_ViewData_with_prefix_MyPartialModel>). Para más detalles, vea las vistas parciales de ASP.NET MVC: prefijos de nombre de entrada


Lo más importante es que la acción creada debe devolver vista parcial, ver a continuación.

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


No necesita su propio controlador. Puedes usar

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

Esto le permite representar el parcial desde cualquier página. Solo asegúrate de que la ruta relativa sea la correcta.


No necesita un controlador y cuando usa .Net 5 (MVC 6) puede renderizar la vista parcial asincrónica

@await Html.PartialAsync("_LoginPartial")

o

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


Si fuera yo, simplemente crearía un nuevo Controlador con una sola Acción y luego usaría RenderAction en lugar de Parcial:

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