2014-09-03 3 views
1

내가 Metasapiens PageMethods를 대체하기 위해 찾고는, 기본적으로이 링크의 런타임 검사를 허용하는 클래스를 만듭니다ASP.NET Response.Redirect를은

예를 metasapiens 페이지 방법을 제거

Response.Redirect(MyPageMethods.Web.Display.Customer(custId)); 

그러면 디스플레이 페이지로 이동 한 다음 고객 ID로 고객 메소드를 호출합니다. 그러나 나는 닷넷 4.5로 업데이트 할 및 PageMethods의 개발은 2007 년
(http://metasapiens.com/pagemethods/)

정지 따라서이 어떤 모범 사례/내 페이지를 만드는 쉬운 방법은 컴파일러 수와 같은 검사 수있는 링크로 리디렉션 프로젝트가 만들어지면?

: 나는 프로그램이 생성, 예를 들면 그 안에서의 URL했다 클래스와 모든 메소드를 생성 된 파일은 XML을 통해 실행 빠른 응용 프로그램을 만들 수 있도록 경우 누군가가이 발견에
+0

새로운 친숙한 URL을 작성하면 도움이됩니다. http://www.hanselman.com/blog/ASPNETFriendlyUrlsCleanerURLsEasierRoutingAndMobileViewsForASPNETWebForms.aspx를 소개합니다. – Fals

답변

1

, 나는 그것을 만든
namespace PS.Web.Pages.Maintenance.Area.Display 
{ 
    public static class DisplayArea 
    { 
     public static string URL = "/Pages/Maintenance/Area/Display/DisplayArea.aspx"; 

     public static string Show(System.Int32 areaId) 
     { 
      return string.Format("{0}?PageMethod=Show&areaId={1}", URL, areaId); 
     } 
    } 
} 

그런 다음 당신은 매개 변수 지금

protected void Page_Load(object sender, EventArgs e) 
{ 
    InitiatePage(); 
} 

private void InitiatePage() 
{ 
    var queryString = Request.QueryString; 

    var pageMethodObject = queryString["PageMethod"]; 
    if (pageMethodObject != null) 
    { 
     string methodName = pageMethodObject.ToString(); 

     Type ty = this.GetType().BaseType; 

     MethodInfo methodInfo = ty.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); 

     if (methodInfo != null) 
     { 
      ParameterInfo[] parameters = methodInfo.GetParameters(); 

      if (parameters.Length == 0) 
      { 
       methodInfo.Invoke(this, null); 
      } 
      else 
      { 
       IList<object> parametersArray = new List<object>(); 

       foreach (var parameter in parameters) 
       { 
        var value = queryString[parameter.Name]; 
        object obj = null; 
        if (parameter.ParameterType.IsEnum) 
        { 
         obj = Enum.Parse(parameter.ParameterType, value); 
        } 
        else 
        { 
         obj = Convert.ChangeType(value, parameter.ParameterType); 
        } 
        parametersArray.Add(obj); 
       } 

       //try and run the method 
       methodInfo.Invoke(this, parametersArray.ToArray()); 
      } 
     } 
    } 
} 

가해야 자동으로 모든 링크의 최대 페이지로드에 우리는 페이지를 initiliase 수 있도록 기본 페이지에 무언가를 추가하고, 통과해야 ... 이제 metasapiens 페이지 메서드가 사라 졌으므로 걱정할 필요가 없습니다. - 분명히 매개 변수에 묻혀있는 URL을 가진 클래스를 만들면 우리가 호출하는 메서드의 매개 변수와 일치해야합니다. 그렇지 않으면 작동하지 않습니다!