我希望替换Metasapiens PageMethods,本质上这会创建一个允许运行时检查链接的类,
e.g。
Response.Redirect(MyPageMethods.Web.Display.Customer(custId));
这将显示页面,然后使用客户ID调用customer方法。但是我想更新到.Net 4.5并且PageMethods的开发在2007年停止了 (http://metasapiens.com/pagemethods/)
因此,是否有任何最佳实践/简单方法使我的页面重定向到链接,这些链接可以在构建项目时进行编译器检查?
答案 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的类时,必须匹配我们调用的方法的参数,否则这将无效!