Defina “Homepage” em Asp.Net MVC

105

No asp.net MVC, a "página inicial" (ou seja, a rota exibida ao acessar www.foo.com) é definida como Home / Index.

  • Onde esse valor está armazenado?
  • Como posso mudar a "página inicial"?
  • Existe algo mais elegante do que usar RedirectToRoute () na ação Index do controlador doméstico?

Tentei usar o grep para Home / Index em meu projeto e não consegui encontrar uma referência, nem vi nada no IIS (6). Eu olhei para a página default.aspx na raiz, mas isso não parecia fazer nada relevante.

obrigado

NikolaiDante
fonte

Respostas:

150

Veja o Default.aspx/Default.aspx.cse o Global.asax.cs

Você pode configurar uma rota padrão:

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

Basta alterar os nomes do Controlador / Ação para o padrão desejado. Essa deve ser a última rota na Tabela de Roteamento.

Michael Stum
fonte
6
@NikolaiDante, você deve fazer desse comentário uma resposta, pois quase perdi e é mais rápido do que esta resposta. :) Obrigado
GazB
3
No MVC 5. se você tiver um login de formulário, ao clicar em login na página inicial, ele ainda redirecionará para o controlador Home, não para o controlador personalizado especificado na rota. registrar a ação fará uma coisa semelhante. Portanto, além de alterar o routeconfig, também precisa alterar algum código onde chama RedirectionToAction ("Index", "Home") e substituí-lo por seus próprios nomes de controlador e ação.
anIBMer
Vale ressaltar que você pode ter Múltiplos Rotas . Este pode ser o seu padrão com parâmetros de URL EM BRANCO, mas você provavelmente quer uma segunda rota como url: "{controller}/{action}/{id}". Basta dar nomes diferentes às rotas.
Jess
Essa resposta pode funcionar para você, mas se precisar de várias rotas, consulte aqui stackoverflow.com/a/8470531/1804678
Jess
1
Essa resposta é adequada apenas para MVC 3 e anteriores. Veja minha resposta abaixo para a abordagem MVC 4 recomendada e posterior.
JTW
19

ASP.NET Core

O roteamento é configurado no Configuremétodo da Startupclasse. Para definir a "página inicial", basta adicionar o seguinte. Isso fará com que os usuários sejam roteados para o controlador e a ação definida no método MapRoute quando / se eles navegarem para a URL base do seu site, ou seja, yoursite.com direcionará os usuários para yoursite.com/foo/index:

app.UseMvc(routes =>
{
   routes.MapRoute(
   name: "default",
   template: "{controller=FooController}/{action=Index}/{id?}");
});

Pre-ASP.NET Core

Use o método RegisterRoutes localizado em App_Start / RouteConfig.cs (MVC 3 e 4) ou Global.asax.cs (MVC 1 e 2) conforme mostrado abaixo. Isso fará com que os usuários sejam roteados para o controlador e a ação definida no método MapRoute se eles navegarem para a URL base do seu site, ou seja, seusite.com direcionará o usuário para seusite.com/foo/index:

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

    // Here I have created a custom "Default" route that will route users to the "YourAction" method within the "FooController" controller.
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "FooController", action = "Index", id = UrlParameter.Optional }
    );
}
JTW
fonte
5

Etapa 1: Clique no arquivo Global.asax em sua solução.

Etapa 2: vá para a definição de

RouteConfig.RegisterRoutes(RouteTable.Routes);

Etapa 3: alterar o nome do controlador e visualizar o nome

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

        routes.MapRoute(name: "Default",
                        url: "{controller}/{action}/{id}",
                        defaults: new { controller = "Home", 
                                        action = "Index", 
                                        id = UrlParameter.Optional }
                        );
    }
}
Ankur Shah
fonte
4
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",               
            defaults: new { controller = "Your Controller", action = "Your Action", id = UrlParameter.Optional }
        );
    }
}
Niraj
fonte
3

verifique o método RegisterRoutes em global.asax.cs - é o local padrão para a configuração da rota ...

Michał Chaniewski
fonte
2

Roteamento de Atributo em MVC 5

Antes do MVC 5, você podia mapear URLs para ações e controladores específicos chamando routes.MapRoute(...)o arquivo RouteConfig.cs. É aqui que o url da página inicial é armazenado ( Home/Index). No entanto, se você modificar a rota padrão conforme mostrado abaixo,

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

tenha em mente que isso afetará os URLs de outras ações e controladores. Por exemplo, se você tiver uma classe de controlador nomeada ExampleControllere um método de ação dentro dela chamado DoSomething, então o url padrão esperado ExampleController/DoSomethingnão funcionará mais porque a rota padrão foi alterada.

Uma solução alternativa para isso é não mexer com a rota padrão e criar novas rotas no arquivo RouteConfig.cs para outras ações e controladores como este,

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
    name: "Example",
    url: "hey/now",
    defaults: new { controller = "Example", action = "DoSomething", id = UrlParameter.Optional }
);

Agora a DoSomethingação da ExampleControllerclasse será mapeada para a url hey/now. Mas isso pode ser entediante para cada vez que você deseja definir rotas para ações diferentes. Então, no MVC 5 você pode agora adicionar atributos para combinar urls com ações como,

public class HomeController : Controller
{
    // url is now 'index/' instead of 'home/index'
    [Route("index")]
    public ActionResult Index()
    {
        return View();
    }
    // url is now 'create/new' instead of 'home/create'
    [Route("create/new")]
    public ActionResult Create()
    {
        return View();
    }
}
Chris Gong
fonte
1

Tentei a resposta, mas não funcionou para mim. Isso é o que acabei fazendo:

Crie um novo controlador DefaultController. Na ação de índice, escrevi um redirecionamento de linha:

return Redirect("~/Default.aspx")

Em RouteConfig.cs, altere controller = "Default" para a rota.

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
vickey1611
fonte
você provavelmente se esqueceu de omitir a palavra "Controller" no nome do controlador, criando a rota padrão
amarax
0

Se você não deseja alterar o roteador, basta ir ao HomeController e alterar MyNewViewHere no índice assim:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
Martin Kei
fonte