Есть ли оператор 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"));