Asp.Net MVC'de "Ana Sayfa" ayarlayın


105

Asp.net MVC'de "ana sayfa" (yani www.foo.com'a tıklandığında görüntülenen rota) Ana Sayfa / Dizin olarak ayarlanır.

  • Bu değer nerede saklanır?
  • "Ana sayfayı" nasıl değiştirebilirim?
  • Ev denetleyicisinin Dizin eyleminde RedirectToRoute () kullanmaktan daha zarif bir şey var mı?

Projemde Ana Sayfa / Dizin için grepping yapmayı denedim ve bir referans bulamadım, IIS'de hiçbir şey göremedim (6). Kökteki default.aspx sayfasına baktım, ancak bu alakalı bir şey yapmıyor gibiydi.

Teşekkürler

Yanıtlar:


150

Bak Default.aspx/Default.aspx.csve Global.asax.cs

Varsayılan bir rota ayarlayabilirsiniz:

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

Denetleyici / İşlem adlarını istediğiniz varsayılana değiştirmeniz yeterlidir. Yönlendirme Tablosundaki son yol bu olmalıdır.


6
@NikolaiDante, bu yorumu bir cevap haline getirmelisiniz çünkü neredeyse kaçırdım ve bu cevaptan daha hızlı. :) Teşekkürler
GazB

3
MVC 5'te bir form oturum açma bilgileriniz varsa, ana sayfada oturum açmaya tıkladığınızda, rotada belirtilen özel denetleyicinize değil, Ana denetleyiciye yönlendirmeye devam edecektir. kayıt eylemi benzer bir şey yapacaktır. Bu nedenle, routeconfig'i değiştirmenin yanı sıra, RedirectionToAction'ı ("Index", "Home") çağırırken bazı kodları da değiştirmeniz ve kendi denetleyiciniz ve eylem adlarınızla değiştirmeniz gerekir.
anIBMer

Birden Fazla Rotanız olabileceğine dikkat çekmek önemlidir . Bu, BLANK URL parametreleriyle varsayılanınız olabilir, ancak muhtemelen aşağıdaki gibi ikinci bir yol istersiniz:url: "{controller}/{action}/{id}" . Rotalara farklı isimler vermeniz yeterli.
Jess

Bu cevap sizin için işe yarayabilir, ancak birden fazla yola ihtiyacınız varsa, buraya bakın stackoverflow.com/a/8470531/1804678
Jess

1
Bu cevap yalnızca MVC 3 ve öncesi için uygundur. Önerilen MVC 4 ve sonraki yaklaşım için aşağıdaki cevabıma bakın.
JTW

19

ASP.NET Core

Yönlendirme, sınıfın Configureyönteminde yapılandırılır Startup. "Ana sayfayı" ayarlamak için aşağıdakileri eklemeniz yeterlidir. Bu, kullanıcıların sitenizin temel URL'sine giderken / olduğunda MapRoute yönteminde tanımlanan eylem ve denetleyiciye yönlendirilmesine neden olur, yani siteniz.com kullanıcıları siteniz.com/foo/index'e yönlendirir:

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

Pre-ASP.NET Core

Aşağıda gösterildiği gibi App_Start / RouteConfig.cs (MVC 3 ve 4) veya Global.asax.cs (MVC 1 ve 2) içinde bulunan RegisterRoutes yöntemini kullanın. Bu, kullanıcıların sitenizin temel URL'sine giderse, MapRoute yönteminde tanımlanan eylem ve denetleyiciye yönlendirilmesine neden olur, yani siteniz.com kullanıcıyı siteniz.com/foo/index'e yönlendirir:

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 }
    );
}

5

Adım 1: Çözümünüzde Global.asax Dosyasına tıklayın.

2. Adım: Ardından Tanıma Git

RouteConfig.RegisterRoutes(RouteTable.Routes);

Adım 3: Denetleyici Adını Değiştirin ve Adı Görüntüle

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 }
                        );
    }
}

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 }
        );
    }
}

3

global.asax.cs içindeki RegisterRoutes yöntemini kontrol edin - rota yapılandırması için varsayılan yerdir ...


2

MVC 5'te Öznitelik Yönlendirme

MVC 5'ten önce routes.MapRoute(...)RouteConfig.cs dosyasını çağırarak URL'leri belirli eylemlere ve denetleyicilere eşleyebilirsiniz . Bu, ana sayfanın url'sinin saklandığı yerdir ( Home/Index). Ancak, varsayılan rotayı aşağıda gösterildiği gibi değiştirirseniz,

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

bunun diğer işlemlerin ve denetleyicilerin URL'lerini etkileyeceğini unutmayın. Örneğin, adlandırılmış bir denetleyici sınıfınız varsa ExampleControllerve bunun içinde bir eylem yöntemi çağrıldıysa DoSomething, ExampleController/DoSomethingvarsayılan yol değiştiği için beklenen varsayılan url artık çalışmayacaktır.

Bunun için bir geçici çözüm, varsayılan yolla uğraşmamak ve RouteConfig.cs dosyasında diğer eylemler ve denetleyiciler için yeni yollar oluşturmaktır.

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 }
);

Şimdi sınıfın DoSomethingeylemi ExampleControllerurl ile eşlenecek hey/now. Ancak, farklı eylemler için rotalar tanımlamak istediğiniz her seferde bunu yapmak yorucu olabilir. Dolayısıyla, MVC 5'te artık url'leri böyle eylemlerle eşleştirmek için öznitelikler ekleyebilirsiniz,

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();
    }
}

1

Cevabı denedim ama benim için işe yaramadı. Sonunda yaptığım şey bu:

Yeni bir denetleyici DefaultController oluşturun. İndeks eyleminde, bir satır yönlendirme yazdım:

return Redirect("~/Default.aspx")

RouteConfig.cs'de, yol için controller = "Default" değerini değiştirin.

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

varsayılan yol oluşturarak denetleyici adına "Denetleyici" kelimesini
çıkarmayı unutmuş olabilirsiniz

0

Yönlendiriciyi değiştirmek istemiyorsanız, HomeController'a gidin ve aşağıdaki gibi dizindeki MyNewViewHere'ı değiştirin:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.