因为我需要为ASP.NET MVC构建一个非常强类型的安全项目。但我发现视图页面中的很多语法都不是类型安全变量。请看下面的例子。
BeginForm("LogOn", "Account")
而不是
Form.BeginForm(x => Account.LogOn)
是否可以创建类似于上述代码的内容?这是一个非常好的强类型源代码。
更新!
我发现用表情树是不可能的。请看下面的代码。
仅包含1个操作的控制器类。
公共类控制器1
{
公共视图操作1()
{
返回空;
}
}
请看表达式代码。
Expression<Action<Controller1>> exp1 = (c => c.Action1());
Expression part = exp1.Body;
if (part.NodeType == System.Linq.Expressions.ExpressionType.Call)
{
MethodCallExpression callExpression = (MethodCallExpression)part;
MessageBox.Show(callExpression.Method.DeclaringType.Name + " : " + callExpression.Method.Name);
}
结果是“控制器1:操作1”!
更新2!
以下代码是强类型begin表单的最终代码。
public static MvcForm BeginForm<BaseController>(this HtmlHelper htmlHelper, Expression<Action<BaseController>> routeExp)
{
Expression part = routeExp.Body;
if (part.NodeType == System.Linq.Expressions.ExpressionType.Call)
{
MethodCallExpression callExpression = (MethodCallExpression)part;
MethodInfo actionMethod = callExpression.Method;
return htmlHelper.BeginForm(actionMethod.Name, actionMethod.DeclaringType.Name);
}
throw new Exception();
}
所以,您可以使用下面的模式来调用它。
<% Html.BeginForm<HomeController>(x => x.Index()); %>
谢谢,