Asp.net MVC 用に、非常に厳密に型指定されたタイプ セーフなプロジェクトをビルドする必要があるためです。しかし、View ページの構文の多くは、タイプ セーフな変数ではないことがわかりました。次の例を見てください。
BeginForm("LogOn", "Account")
それ以外の
Form.BeginForm(x => Account.LogOn)
上記のコードのようなものを作成することは可能ですか? 強く型付けされた非常に美しいソースコードです。
アップデート!
式ツリーでは不可能であることがわかりました。次のコードを見てください。
1 つのアクションのみを含むコントローラー クラス。public class Controller1 { public View Action1() { null を返します。} }
式コードを見てください。
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);
}
結果は「Controller1:Action1」!
アップデート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()); %>
ありがとう、