Создать контроллер для частичного просмотра в ASP.NET MVC



Как я могу создать отдельный контроллер и модель для частичного представления? Я хочу иметь возможность разместить этот частичный вид в любом месте на сайте, поэтому ему нужен собственный контроллер. Я текущий рендеринг частичный как так



@Html.Partial("_Testimonials")
631   6  

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-файл) нужно:

  1. создать модель страницы и частичную модель

  2. поместите частичную модель в качестве свойства в модель страницы

  3. в представлении страницы использовать Формат html.EditorFor (m => m.MyPartialModel)
  4. создать соответствующий частичный вид
  5. создайте класс, очень похожий на этот Дочерний контроллер действий, описанный здесь в ответах много раз. Но это будет просто класс (наследуется от объекта, а не от контроллера). Назовем его MyControllerPartial. MyControllerPartial будет знать только о частичной модели.
  6. используйте свой MyControllerPartial в контроллере страницы. Передайте модель.MyPartialModel to MyControllerPartial
  7. позаботьтесь о правильном префиксе в вашем MyControllerPartial. Пример Fox: ModelState.AddError ("MyPartialModel."+"SomeFieldName", "Error")
  8. в 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

    Ничего не найдено.