ASP.NET Response.Redirect,删除metasapiens页面方法

时间:2014-09-03 12:31:26

标签: c# asp.net-mvc asp.net-4.5

我希望替换Metasapiens PageMethods,本质上这会创建一个允许运行时检查链接的类,

e.g。

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

这将显示页面,然后使用客户ID调用customer方法。但是我想更新到.Net 4.5并且PageMethods的开发在2007年停止了 (http://metasapiens.com/pagemethods/

因此,是否有任何最佳实践/简单方法使我的页面重定向到链接,这些链接可以在构建项目时进行编译器检查?

1 个答案:

答案 0 :(得分:1)

如果有人发现这个,我就这样创建了一个快速的应用程序,它运行程序生成的xml文件,并创建了具有url的类及其中的所有方法,例如:

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());
            }
        }
    }
}

现在它应该自动全部链接....所以现在metasapiens页面方法已经消失,我们不必担心它们! - 显然当我们创建带有隐藏在参数中的URL的类时,必须匹配我们调用的方法的参数,否则这将无效!