[英]ASP.NET Response.Redirect, remove metasapiens page methods
我正在寻找替换Metasapiens PageMethods的方法,本质上这将创建一个允许对链接进行运行时检查的类,
例如
Response.Redirect(MyPageMethods.Web.Display.Customer(custId));
这将转到显示页面,然后使用客户ID调用客户方法。 但是,我想更新到.Net 4.5,PageMethods的开发已于2007年停止。
( http://metasapiens.com/pagemethods/ )
因此,有没有使我的页面重定向到可以在构建项目时进行编译器检查的链接的最佳实践/简便方法?
万一有人发现它,我就这样做了,所以我创建了一个快速应用程序,该应用程序运行程序生成的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埋在参数中时,必须与我们要调用的方法的参数匹配,否则将不起作用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.