2010-05-07 4 views
1

나는 내 ASCX 내가 컨트롤러를 변경, 그것을 다시 사용할 수 있도록 & 꽤 큰입니다Asp.net MVC 구성 Html.ActionLink 컨트롤러/방법

<%=Html.ActionLink<PersonController>(x => x.Publications(param1, param2, ...)) %> 

/방법 같은 HTML 레이아웃과 부분보기를 ASCX 한 다른 컨트롤러/메소드로 Html.ActionLink에서 다른 컨트롤러의 메소드는 PersonController.Publications와 동일한 서명을가집니다. 내 레이아웃에 컨트롤러/메소드를 구성하는 방법을 제시하는 가장 좋은 방법을 제안 해주십시오.

사전 가장 쉬운 방법은 모델에 문자열로 컨트롤러 이름과 액션 이름을 가지고하는 것입니다

답변

1

에 감사드립니다. 그런 다음 actionlink의 강력하게 형식화되지 않은 오버로드를 사용할 수 있습니다. 이런 식으로 뭔가 :이 같은

<%=Html.ActionLink(Model.Action, Model.Controller, new { param1 = 1, param2 = 2 })%> 

그리고 그것을 사용 : 당신이 강력한 형식의 버전을 사용하려면

<%Html.RenderPartial("PartialName", new PartialModel{Controller = "Person", Action = "Publications"})%> 

당신은 이런 식으로 뭔가를 할 수 있습니다

//Model for your partial view 
public class PartialModel<TController> where TController : Controller 
{ 
    public Func<int, int, Expression<Action<TController>>> GetLinkAction { get; set; } 
} 

//Render the action link in your partial 
<%=Html.ActionLink(Model.GetLinkAction(1, 2))%> 

//Render the partialview in any page 
<%Html.RenderPartial("PartialName", new PartialModel<PersonController> { GetLinkAction = (param1, param2) => x => x.Publications(param1, param2) })%> 

당신의 것입니다 물론 매개 변수에 맞게 조정해야합니다. 강력하게 형식화 된 방법에 대한 좋은 점은 메소드가 정확히 동일한 서명 및 매개 변수 이름을 가질 필요가 없다는 것입니다.

+0

Wonderfull :) 대단히 감사합니다! –