Мой контроллер по умолчанию не работает (.Net MVC) - PullRequest
0 голосов
/ 04 января 2012

Я работаю над приложением MVC (.Net MVC 3).

Я бы хотел добиться того, чтобы, если пользователь оставил URL-путь (например, http://localhost:12345/), контроллер по умолчанию вызывался для выводавид по умолчанию.Поэтому я зарегистрировал это в Global.asax

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

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

У меня есть DefaultController в папке "Controllers"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace RyfMvcTestApplication1.Controllers
{
    public class DefaultController : Controller
    {
      public ActionResult Default()
      {
        return View();
      }
    }
}

Представление (Default.cshtml) находится в Views / Default ипросто показывает приветственное сообщение.К сожалению, если я оставлю URL-путь, будет показана пустая страница .Это работает, только если я добавлю «Default» в качестве пути к URL

http://localhost:12345/Default

Я что-то упустил?

Ответы [ 4 ]

4 голосов
/ 04 января 2012

Невозможно воспроизвести вашу проблему.Шаги:

  1. Создайте новое приложение ASP.NET MVC 3 с помощью встроенного мастера
  2. Щелкните правой кнопкой мыши папку «Контроллеры», выберите «Добавить» -> «Контроллер» и используйте DefaultController как имя со следующим содержимым:

    public class DefaultController : Controller
    {
        public ActionResult Default()
        {
            return View();
        }
    }
    
  3. Добавить представление ~/Views/Default/Default.cshtml:

    @{
        ViewBag.Title = "Default";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h2>Default</h2>
    
  4. Обновить метод RegisterRoutesв Global.asax, чтобы это выглядело так:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            "Route1",
            "{controller}/{action}/{id}",
            new { controller = "Default", action = "Default", id = UrlParameter.Optional }
        );
    }
    
  5. Hit F5

  6. Встроенный веб-серверПосле запуска приложение запускается в браузере по умолчанию, используя http://localhost:xxxx/ в качестве URL-адреса, а действие default выполняется на контроллере default.
2 голосов
/ 04 января 2012

Извините всех, я сделал очень глупую ошибку, вставив страницу Default.aspx в проект. По умолчанию эта страница отображается всегда, когда в URL нет пути, и она имеет приоритет над настройками global.asax: (

0 голосов
/ 04 января 2012

Цитируется с этой страницы :

Если вы не поставляете контроллер, то для параметра контроллера по умолчанию используется значение Home. Если вы не предоставите действие, для параметра действия будет задано значение Index. Наконец, если вы не предоставите идентификатор, для параметра id по умолчанию будет пустая строка.

Таким образом, вы можете переименовать ваш контроллер в HomeContoller или создать перенаправление на нужный вам URl внутри default.aspx файла.

0 голосов
/ 04 января 2012

Я не совсем понимаю вашу точку зрения. Вы пытаетесь достичь чего-то, что уже встроено и готово для использования в любом новом проекте MVC.

Когда вы создаете новый проект, есть маршрут по умолчанию с использованием controller = "home", action = "index", и он работает так, как вы и предполагали.

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

...