既然我决定让RC在现在停留在Beta版的时候,我无法知道是否添加了强类型的RedirectToAction。有没有人尝试过,在RC中有强类型的RedirectToAction(也可能是ActionLink)?
解决方法
不,没有。
protected RedirectToRouteResult RedirectToAction<T>(Expression<Action<T>> action,RouteValueDictionary values) where T : Controller { var body = action.Body as MethodCallExpression; if (body == null) { throw new ArgumentException("Expression must be a method call."); } if (body.Object != action.Parameters[0]) { throw new ArgumentException("Method call must target lambda argument."); } string actionName = body.Method.Name; var attributes = body.Method.GetCustomAttributes(typeof(ActionNameAttribute),false); if (attributes.Length > 0) { var actionNameAttr = (ActionNameAttribute)attributes[0]; actionName = actionNameAttr.Name; } string controllerName = typeof(T).Name; if (controllerName.EndsWith("Controller",StringComparison.OrdinalIgnoreCase)) { controllerName = controllerName.Remove(controllerName.Length - 10,10); } RouteValueDictionary defaults = LinkBuilder.BuildParameterValuesFromExpression(body) ?? new RouteValueDictionary(); values = values ?? new RouteValueDictionary(); values.Add("controller",controllerName); values.Add("action",actionName); if (defaults != null) { foreach (var pair in defaults.Where(p => p.Value != null)) { values.Add(pair.Key,pair.Value); } } return new RedirectToRouteResult(values); }
这应该工作。