베타 버전으로 머무르는 동안 RC를 사용하기로 결정했기 때문에 강력한 형식의 RedirectToAction
이 추가되었는지 알 길이 없습니다. 아무도 시도해 본 결과 RC에 강하게 입력 된 RedirectToAction
(어쩌면 ActionLink
)이 있습니까?.NET MVC에는 강력한 형식의 RedirectToAction이 있습니까?
답변
아니요.
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);
}
그래야합니다.
선물 dll에 존재합니까? 나는 그것을 발견 할 수 없다. 나는 또한 그것이 왜 그리워했는지 궁금하다?? –
차드 .. 어떻게 컨트롤러 클래스의 확장 메서드가 될 수 있습니까? –
기본 Controller 클래스에 넣고 컨트롤러가 상속되도록하는 것이 좋습니다. –
이것은 Controller의 확장 메소드로서 ModelState 핸들링, 테스트 등을 위해 강하게 타자를 치는 많은 것들과 함께 MVC Contrib에 포함되어 있습니다. 이것은 제공하는 것에 대한 추가 종속성을 가질 가치가 있습니다.
정답입니다. –
전체 MvcContrib 라이브러리가 필요없는 경우 MvcNavigationHelpers NuGet 패키지를 사용하면이 기능 만 사용할 수 있습니다.
사용할 수 있습니다 return RedirectToAction(nameof(Index));
허용되는 대답을 @Darrell Mozingo의 대답으로 변경해야합니다. 왜냐하면 RedirectToAction이 실제로 Futures 어셈블리에 있기 때문입니다. –