Asp.net MVC 용으로 매우 강력한 형식의 & 유형 안전 프로젝트를 빌드해야하기 때문에. 그러나보기 페이지에서 많은 구문이 유형에 안전한 변수가 아니라는 사실을 발견했습니다. 다음 예제를 살펴보십시오. 대신속성과 같은 메서드를 참조 할 수 있습니까? Validate (x => x.Property)
Form.BeginForm(x => Account.LogOn)
의
BeginForm("LogOn", "Account")
그것은 위의 코드 같은 것을 만들 수 있습니까? 강력한 형식의 소스 코드입니다.
업데이트!
표현식 트리에서는 불가능하다는 것을 알았습니다. 다음 코드를 살펴보십시오.
동작이 하나만있는 컨트롤러 클래스입니다. 공용 클래스 Controller1 { public보기 Action1() { return 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!
다음 코드는 강력한 형식의 시작 양식의 최종 코드입니다.
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()); %>
덕분에,
당신이 말한대로, 나는 다만 시도한다. 이 문제를 해결할 수있는 헬퍼 클래스를 만들 수 있습니다. 감사! –