Есть ли оператор nameof() для контроллеров MVC в С#?
Недавно введенный nameof
оператор полезен в том, чтобы сделать мой код "типизированным".
Вместо
return RedirectToAction("Edit");
мы можем написать
return RedirectToAction(nameof(Edit));
Но для получения имени контроллера это не так просто, потому что у нас есть суффикс Controller
. Просто хочу знать, хочу ли я иметь
return RedirectToAction(nameof(Index), controllernameof(Home));
чтобы заменить место
return RedirectToAction("Index", "Home");
как мы можем реализовать оператор controllernameof
?
Ответы
Ответ 1
Возможно, для ваших нужд может потребоваться следующий метод расширения:
public static class ControllerExtensions
{
public static string ControllerName(this Type controllerType)
{
Type baseType = typeof(Controller);
if (baseType.IsAssignableFrom(controllerType))
{
int lastControllerIndex = controllerType.Name.LastIndexOf("Controller");
if (lastControllerIndex > 0)
{
return controllerType.Name.Substring(0, lastControllerIndex);
}
}
return controllerType.Name;
}
}
Что вы можете вызвать так:
return RedirectToAction(nameof(Index), typeof(HomeController).ControllerName());
Ответ 2
Нет, нет.
Посмотрите "T4MVC" в NuGet для решения;). Это "так же хорошо, как и получается".
Ответ 3
Решение, разрешающее случай XControllerController, будет больше похоже на:
String nameStr = nameof(FlightControllerController);
nameStr = nameStr.Substring(0, nameStr.LastIndexOf("Controller"));