Получить имя контроллера asp.net при помощи nameof

217
30 марта 2018, 09:52

Внимание! Это перевод вопроса How to use C# nameof() with ASP.NET MVC Url.Action

Мне не нравится писать строки в выражениях вида:

Url.Action("ActionName", "Home")  <------ так работает

Хочется строгой типизации наподобие:

Url.Action(nameof(ActionName), nameof(HomeController)) <----- так не работает :(
Answer 1

Первый вариант. Используйте метод расширения:

public static string UrlName(this Type controller)
{
  var name = controller.Name;
  return name.EndsWith("Controller") ? name.Substring(0, name.Length - 10) : name;
}

Пример использования:

Url.Action(nameof(ActionName), typeof(HomeController).UrlName())

Второй вариант:

public static class ControllerExtensions
{
    public static string Action<T>(this Controller controller, string actionName)
        where T : Controller
    {
        var name = typeof(T).Name;
        string controllerName = name.EndsWith("Controller")
            ? name.Substring(0, name.Length - 10) : name;
        return controller.Url.Action(actionName, controllerName);
    }
}

Пример использования:

this.Action<HomeController>(nameof(ActionName));
READ ALSO
VS загружает ЦП на 40%

VS загружает ЦП на 40%

Товарищи, тут возникла следующая проблемка: имею в VS проект на С#, в котором имеется статический класс, в статическом инициализаторе которого...

200
Помогите превести код из C++ в С# [требует правки]

Помогите превести код из C++ в С# [требует правки]

Помогите перевести код из С++ в С#

197
Направление гравитации Particle System [Unity, C#]

Направление гравитации Particle System [Unity, C#]

Как задать направление гравитации по оси Z для частиц Particle System в Unity используя С#Желательно чтобы ось Z синхронизировалась с осью Z другого...

210
Открытие документов Word через Interop

Открытие документов Word через Interop

В общем, при открытии документа я заметил, что может происходить 2 проблемы:

145