1

Html.RenderPartial("~/Views/Payments/MyControl.ascx");을 호출하면 뷰에서 MyControl.ascx가 System.Web.Mvc.ViewUserControl을 직접 상속하는 컨트롤 인 경우 작동합니다. 컨트롤이 System.Web.Mvc.ViewUserControl에서 파생 새로운 클래스를 상속하는 경우Html.RenderPartial을 사용하여 파생 부분 뷰 렌더링

그러나, Html.RenderPartial("~/Views/Payments/MyDerivedControl.ascx");에 대한 호출이 그러한 뷰가 존재하지 않음을보고, 실패합니다.

class MyDerivedControl : System.Web.Mvc.ViewUserControl 
{ 
    public Method() 
    { 
     ViewData["SomeData"] = "test"; 
    } 
} 

이 해결 방법은, 또는 내가이 일을해야하는 또 다른 방법이있다 :

System.Web.Mvc.ViewUserControl을 유도? HTML 도우미일까요?

답변

0

MVC 관점에서 볼 때 데이터를 제공하는 것은 좋지 않습니다. 보통 이것은 컨트롤러의 책임입니다. 컨텍스트 및이 데이터가 나타내는 내용에 따라 HTML 도우미를 사용하거나 작업 필터를 작성할 수 있습니다. 다음

public class SomeDataActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 
     filterContext.Controller.ViewData["SomeData"] = "test"; 
    } 
} 

그리고이 필터와 액션 장식 : 여기에 사용자 지정 작업 필터 예입니다 뷰는 데이터를 제공하지 않습니다

[SomeDataActionFilter] 
public ActionResult Index() 
{ 
    return View(); 
} 
+0

는; 내 질문에 제공된 데이터를 ** 전달 된 ** 부분보기로 전달하는보기 및 결과 (해석 된 ViewUserControl 클래스에 의해) 후 표시하려고 할 때 오류가 발생했습니다. 데이터가 어디서 왔는지는 중요하지 않습니다. –

+1

@FreshCode, 나는이 특별한 예외가 왜 발생하는지 전혀 모른다. 뷰가 MVC 애플리케이션에서 시도한 방식대로 상속되지 않아야한다는 것만 알면됩니다. 뷰는 컨트롤러에서 오는 데이터를 표시하기위한 것입니다. 마스터 페이지, 부분보기, 뷰에서 기능을 작성하고 다시 사용할 수있는 HTML 도우미와 같은 기술이 있습니다. VS에서 생성 된 기본 ASP.NET MVC 프로젝트 템플릿에는'ascx' 컨트롤과 관련된'.cs' 파일조차 없습니다. –