Создать контроллер для частичного просмотра в ASP.NET MVC
Как я могу создать отдельный контроллер и модель для частичного представления? Я хочу иметь возможность разместить этот частичный вид в любом месте на сайте, поэтому ему нужен собственный контроллер. Я текущий рендеринг частичный как так
@Html.Partial("_Testimonials")
6 ответов:
почему бы не использовать
Html.RenderAction()?затем вы можете поместить следующее в любой контроллер (даже создав для него новый контроллер):
[ChildActionOnly] public ActionResult MyActionThatGeneratesAPartial(string parameter1) { var model = repository.GetThingByParameter(parameter1); var partialViewModel = new PartialViewModel(model); return PartialView(partialViewModel); }тогда вы можете создать новый частичный вид и иметь свой
PartialViewModelбыть, что он наследует от.для Razor блок кода в представлении будет выглядеть так:
@{ Html.RenderAction("Index", "Home"); }для WebFormsViewEngine, это будет выглядеть так:
<% Html.RenderAction("Index", "Home"); %>
если бы это был я, я бы просто создал новый контроллер с одним действием, а затем использовал RenderAction вместо Partial:
// Assuming the controller is named NewController @{Html.RenderAction("ActionName", "New", new { routeValueOne = "SomeValue" }); }
ему не нужен свой собственный контроллер. Вы можете использовать
@Html.Partial("../ControllerName/_Testimonials.cshtml")Это позволяет отображать частичное с любой страницы. Просто убедитесь, что относительный путь правильный.
самое главное, созданное действие должно возвращать частичный вид, см. ниже.
public ActionResult _YourPartialViewSection() { return PartialView(); }
вам не нужен контроллер, и при использовании .Net 5( MVC 6) Вы можете отобразить частичное представление async
@await Html.PartialAsync("_LoginPartial")или
@{await Html.RenderPartialAsync("PartialName");}или если вы используете .net core 2.1 > вы можете просто использовать:
<partial name="Shared/_ProductPartial.cshtml" for="Product" />
Html.Действие-это плохо продуманная технология. Потому что в вашем контроллере страницы вы не можете получить результаты вычислений в вашем частичном контроллере. Поток данных - это только контроллер страницы = > частичный контроллер.
чтобы быть ближе к WebForm UserControl (*.ascx-файл) нужно:
создать модель страницы и частичную модель
поместите частичную модель в качестве свойства в модель страницы
- в представлении страницы использовать Формат html.EditorFor (m => m.MyPartialModel)
- создать соответствующий частичный вид
- создайте класс, очень похожий на этот Дочерний контроллер действий, описанный здесь в ответах много раз. Но это будет просто класс (наследуется от объекта, а не от контроллера). Назовем его MyControllerPartial. MyControllerPartial будет знать только о частичной модели.
- используйте свой MyControllerPartial в контроллере страницы. Передайте модель.MyPartialModel to MyControllerPartial
- позаботьтесь о правильном префиксе в вашем MyControllerPartial. Пример Fox: ModelState.AddError ("MyPartialModel."+"SomeFieldName", "Error")
- в MyControllerPartial вы можете выполнить проверку и реализовать другие логики, связанные с этой частичной моделью
в этой ситуации вы можете использовать его как:
public class MyController : Controller { .... public MyController() { MyChildController = new MyControllerPartial(this.ViewData); } [HttpPost] public ActionResult Index(MyPageViewModel model) { ... int childResult = MyChildController.ProcessSomething(model.MyPartialModel); ... } }С. П. На Шаге 3 Вы можете использовать Html.Partial ("PartialViewName", Model.MyPartialModel,
). Для получения более подробной информации см. ASP.NET частичные представления MVC: префиксы входных имен
Comments