ActionLink генерирует странное исключение при вызове

#asp.net #asp.net-mvc #asp.net-mvc-3

#asp.net #asp.net-mvc #asp.net-mvc-3

Вопрос:

Я столкнулся со следующей проблемой: у меня есть главная простая страница, на которой я хочу протестировать действие контроллера. Контроллер находится в другом проекте, но на него есть ссылка в моем проекте MVC, а также в области пространства имен Web.config.

Простая страница такова:

   <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="Controllers.MyControllers" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <div>
        <%=Html.ActionLink("Persons", "SearchPersons","Person")%>
    </div>
</body>
</html>
 

PersonController имеет методы SearchPersons, которые возвращают представление. PersonController определен в проекте Controllers в пространстве имен Controllers.MyControllers.
Когда загружается простая страница, она выдает следующее исключение в моем Html.Вызов ActionLink:

 {"Object reference not set to an instance of an object."}   at System.Web.Mvc.Html.LinkExtensions.ActionLink(HtmlHelper htmlHelper, String linkText, String actionName, String controllerName, RouteValueDictionary routeValues, IDictionary`2 htmlAttributes)
   at System.Web.Mvc.Html.LinkExtensions.ActionLink(HtmlHelper htmlHelper, String linkText, String actionName, String controllerName)
   at ASP.default_aspx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in d:ProjectsMVCDefault.aspx:line 12


at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
   at System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
 

Может ли кто-нибудь указать мне правильное направление? Какой элемент на самом деле равен нулю? Является ли это проблемой ссылки (учитывая, что это в другом проекте)?

Заранее спасибо, Тамаш

Ответ №1:

Эта ошибка не связана с тем, где вы объявляете свои контроллеры. Я предполагаю, что у вас есть маршрут, который объявляет параметр, который не является необязательным и не имеет значения по умолчанию.

Комментарии:

1. Ну, Html. ActionLink имеет 10 перегрузок, 2 из которых отличаются только последним параметром: Html. ActionLink (имя ссылки, действие, контроллер) и Html. ActionLink (имя ссылки, действие, значения маршрута). Может ли это перепутать эти 2? Я хочу перегрузку с последним параметром в качестве имени контроллера. Могу ли я каким-то образом обеспечить это?

2. Я не думаю, что это вспомогательная проблема. Компилятор выберет правильную перегрузку. Можете ли вы показать нам свои правила маршрутизации?

3. Есть те, которые используются по умолчанию (не изменяли global.asax): public static void RegisterRoutes(RouteCollection routes) { маршруты. IgnoreRoute(«{resource}.axd/{*pathInfo}»); маршруты. MapRoute( «По умолчанию», // Имя маршрута «{controller}/{action}/{id}», // URL с параметрами new {controller = «Home», action = «Index», id = UrlParameter. Необязательно } // Параметры по умолчанию ); }

4. Это должно сработать… Я протестировал его прямо сейчас с тем же помощником, и он работает. Попробуйте очистить проект, а затем перестроить

5. То же самое. Теперь я вижу, что в моих данных (в окне исключения) указано {System . Коллекции. ListDictionaryInternal} так это не для значений маршрута?