Ответ 1
Используйте это:
string controllerName =
(string)htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
string areaName =
(string)htmlHelper.ViewContext.RouteData.DataTokens["area"];
Я пытаюсь переписать и настроить @Html.ActionLink
, в одной из перегрузок этого метода параметры:
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper,
string linkText, string actionName);
И я хочу что-то вроде выше, а также нужно найти имя области и имя_контроллера, не передавая его по параметрам, я думаю использовать следующие элементы:
string controller = ViewContext.RouteData.Values["Controller"];
string area = ViewContext.RouteData.DataTokens["Area"];
но ошибка возрастает как:
An object reference is required for the non-static field, method, or property
'System.Web.Mvc.ControllerContext.RouteData.get'
И, очевидно, я использую static, поэтому как вы предлагаете найти имя области и имя контроллера в HtmlHelpers
?
Используйте это:
string controllerName =
(string)htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
string areaName =
(string)htmlHelper.ViewContext.RouteData.DataTokens["area"];
public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName
)
{
RouteData rd = htmlHelper.ViewContext.RouteData;
string currentController = rd.GetRequiredString("controller");
string currentAction = rd.GetRequiredString("action");
// the area is an optional value and it won't be present
// if the current request is not inside an area =>
// you need to check if it is null or empty before using it
string area = rd.Values["area"] as string;
...
}
Я считаю, что "контроллер" и "area" должны быть строчными. Вот как получить значение площади:
ASP.NET MVC - получить имя текущей области в представлении или контроллере
Если в настоящее время нет области, это даст исключение ссылки на объект, поэтому сначала проверьте значение null, а затем установите значение, если оно не равно null. Ваш контроллер также прав, просто попробуйте в нижнем регистре. Надеюсь, что это поможет