Program Tip

ASP.NET MVC에서 부분보기 용 컨트롤러 만들기

programtip 2020. 12. 7. 20:35
반응형

ASP.NET MVC에서 부분보기 용 컨트롤러 만들기


부분보기에 대한 개별 컨트롤러 및 모델을 어떻게 생성 할 수 있습니까? 이 부분보기를 사이트의 어느 곳에 나 배치 할 수 있으므로 자체 컨트롤러가 필요합니다. 나는 현재 부분적으로 렌더링하고 있습니다.

@Html.Partial("_Testimonials")

왜 사용하지 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"); %>

나라면 단일 액션으로 새 컨트롤러를 만든 다음 Partial 대신 RenderAction을 사용합니다.

// 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)를 사용할 때 부분보기를 비동기로 렌더링 할 수 있습니다.

@await Html.PartialAsync("_LoginPartial")

또는

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

또는 .net core 2.1을 사용하는 경우> 다음을 사용할 수 있습니다 .

<partial name="Shared/_ProductPartial.cshtml"
         for="Product" />

Html.Action은 잘못 설계된 기술입니다. 페이지 컨트롤러에서는 부분 컨트롤러에서 계산 결과를받을 수 없기 때문입니다. 데이터 흐름은 페이지 컨트롤러 => 부분 컨트롤러입니다.

WebForm UserControl (*. ascx)에 더 가깝게하려면 다음을 수행해야합니다.

  1. 페이지 모델 및 부분 모델 만들기

  2. 페이지 모델의 속성으로 부분 모델 배치

  3. 페이지보기에서 Html.EditorFor (m => m.MyPartialModel) 사용
  4. 적절한 부분보기 만들기
  5. Create a class very similar to that Child Action Controller described here in answers many times. But it will be just a class (inherited from Object rather than from Controller). Let's name it as MyControllerPartial. MyControllerPartial will know only about Partial Model.
  6. Use your MyControllerPartial in your page controller. Pass model.MyPartialModel to MyControllerPartial
  7. Take care about proper prefix in your MyControllerPartial. Fox example: ModelState.AddError("MyPartialModel." + "SomeFieldName", "Error")
  8. In MyControllerPartial you can make validation and implement other logics related to this Partial Model

In this situation you can use it like:

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. In step 3 you can use Html.Partial("PartialViewName", Model.MyPartialModel, <clone_ViewData_with_prefix_MyPartialModel>). For more details see ASP.NET MVC partial views: input name prefixes

참고URL : https://stackoverflow.com/questions/6287015/create-controller-for-partial-view-in-asp-net-mvc

반응형