Nano Hash - криптовалюты, майнинг, программирование

LogOnPartial визуализирует с пустым href — MVC 3

Я использую стандартный веб-проект MVC 3, и я записал свой HTML в стандартный файл HTML, а затем скопировал/вставил его в файл _layout.cshtml. Со всеми правильными RenderBody() и @Html.Partial("_LogOnPartial") страница работает нормально, но ActionLink внутри _LogOnPartial не отображает href.

Html.ActionLink("Log On", "LogOn", "Account")

Выйдет как:

<a href="">Log On</a>

Это не отличается от стандартной ссылки, которую вы получаете при запуске веб-проекта MVC 3.

Зарегистрированные маршруты:

 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
            "Products",
            "{controller}/{action}/{id}",
            new {controller = "Products", action = "Index"});

        routes.MapRoute(
        "Newsletter",
        "{controller}/{action}/{emailAddress}",
        new { controller = "Newsletter", action = "Index" });

        routes.MapRoute(
       "Account",
       "{controller}/{action}/{id}",
       new { controller = "Account", action = "LogOn", id = UrlParameter.Optional });

    }

Я не понимаю, почему это происходит, но в Visual Studio это не подчеркивает действие или контроллер, что заставляет меня думать, что он неправильно видит AccountController. У кого-нибудь есть идеи?


  • Чтобы исключить очевидное, у вас есть действие LogOn в AccountController, не так ли? 19.04.2011
  • Да. Он входит в стандартный пакет. Infact есть LogOn и LogOn (HttpPost), а также LogOn.cshtml. 19.04.2011

Ответы:


1

Фабиан прав. Проблема в том, что существует слишком много маршрутов, многие из которых практически идентичны по своей структуре. Все ваши маршруты «По умолчанию», «Продукты» и «Учетная запись» ищут контроллер, действие и необязательный идентификатор (явно или неявно). Вы, вероятно, добились бы значительно большего успеха, если бы просто вернули контроллеру по умолчанию его заводскую стандартную форму, например:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new
            {
                controller = "Home",
                action = "Index",
                id = UrlParameter.Optional
            }); // Parameter defaults


        routes.MapRoute(
        "Newsletter",
        "{controller}/{action}/{emailAddress}",
        new { controller = "Newsletter", action = "Index" });

    }

Поскольку идентификатор является необязательным, маршруты ваших продуктов все равно будут сопоставляться, если вы укажете ActionLink без идентификатора (например, @Html.ActionLink("My Link", "Products", "Index")), а форма маршрута «Учетная запись» в любом случае идентична маршруту «По умолчанию». Нет необходимости использовать его, и MVC, вероятно, отключается между ними, что приводит к сбою Href вашего частичного входа в систему.

11.05.2011

2

ActionLink не смотрит на контроллер или его действия, а только на таблицу маршрутизации. Убедитесь, что у вас есть маршрут с действием «Вход в систему» ​​и контроллером «Учетная запись», установленным в вашем файле global.asax.

Редактировать:
Я рекомендую вам немного почитать о маршрутизации mvc. Ваши текущие маршруты слишком жадные и будут совпадать, когда не должны.

Для LogOn я бы использовал что-то вроде этого (поместите его вверху, потому что он наименее жадный, поскольку он не содержит никаких переменных):

routes.MapRoute(
       "Account",
       "logon",
       new { controller = "Account", action = "LogOn", id = UrlParameter.Optional });
20.04.2011
  • Я установил следующее в Global.asax.cs: routes.MapRoute( "Account", "{controller}/{action}/{id}", new { controller = "Account", action = "LogOn", id = UrlParameter.Optional });, но он все еще отображает href="/". Когда я изменяю его на Html.ActionLink(Log On, About, Home), он отображает href="/Home/About/". 20.04.2011
  • Пожалуйста, обновите свой вопрос, указав весь метод RegisterRoutes. 20.04.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..