Setel "Homepage" di Asp.Net MVC

105

Dalam asp.net MVC "homepage" (yaitu rute yang ditampilkan saat menekan www.foo.com) diatur ke Home / Index.

  • Di mana nilai ini disimpan?
  • Bagaimana cara mengubah "beranda"?
  • Apakah ada yang lebih elegan daripada menggunakan RedirectToRoute () dalam tindakan Indeks pengontrol rumah?

Saya mencoba grepping untuk Home / Index dalam proyek saya dan tidak dapat menemukan referensi, saya juga tidak dapat melihat apa pun di IIS (6). Saya melihat halaman default.aspx di root, tetapi itu tampaknya tidak melakukan apa pun yang relevan.

Terima kasih

NikolaiDante
sumber

Jawaban:

150

Lihatlah Default.aspx/Default.aspx.csdan Global.asax.cs

Anda dapat mengatur rute default:

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

Ubah saja nama Pengontrol / Tindakan ke default yang Anda inginkan. Itu seharusnya menjadi rute terakhir di Tabel Perutean.

Michael Stum
sumber
6
@NikolaiDante Anda harus membuat komentar itu sebagai jawaban karena saya hampir melewatkannya dan itu lebih cepat dari jawaban ini. :) Terima kasih
GazB
3
Di MVC 5. jika Anda memiliki form login, ketika Anda mengklik login di halaman beranda, itu akan tetap dialihkan ke pengontrol Rumah, bukan pengontrol kustom Anda yang ditentukan dalam rute. tindakan register akan melakukan hal serupa. Jadi selain mengubah routeconfig, juga perlu mengubah beberapa kode di mana memanggil RedirectionToAction ("Index", "Home") dan menggantinya dengan controller dan nama tindakan Anda sendiri.
anIBMer
Perlu diketahui bahwa Anda dapat memiliki Banyak Rute . Ini bisa menjadi default Anda dengan parameter URL KOSONG, tetapi Anda mungkin menginginkan rute kedua seperti url: "{controller}/{action}/{id}". Beri nama rute yang berbeda.
Jess
Jawaban ini mungkin berhasil untuk Anda, tetapi jika Anda memerlukan beberapa rute, lihat di sini stackoverflow.com/a/8470531/1804678
Jess
1
Jawaban ini hanya cocok untuk MVC 3 dan sebelumnya. Lihat jawaban saya di bawah untuk MVC 4 yang direkomendasikan dan pendekatan yang lebih baru.
JTW
19

ASP.NET Core

Routing dikonfigurasi dalam Configuremetode Startupkelas. Untuk menyetel "beranda" cukup tambahkan yang berikut ini. Ini akan menyebabkan pengguna diarahkan ke pengontrol dan tindakan yang ditentukan dalam metode MapRoute saat / jika mereka menavigasi ke URL dasar situs Anda, yaitu, situsanda.com akan mengarahkan pengguna ke situsanda.com/foo/index:

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

Pra-ASP.NET Core

Gunakan metode RegisterRoutes yang terletak di App_Start / RouteConfig.cs (MVC 3 dan 4) atau Global.asax.cs (MVC 1 dan 2) seperti yang ditunjukkan di bawah ini. Ini akan menyebabkan pengguna diarahkan ke pengontrol dan tindakan yang ditentukan dalam metode MapRoute jika mereka menavigasi ke URL dasar situs Anda, yaitu, situsanda.com akan mengarahkan pengguna ke situsanda.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
sumber
5

Langkah 1: Klik File Global.asax di Solusi Anda.

Langkah 2: Lalu Pergi ke Definisi

RouteConfig.RegisterRoutes(RouteTable.Routes);

Langkah 3: Ubah Nama Pengontrol dan Nama Tampilan

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
sumber
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
sumber
3

periksa metode RegisterRoutes di global.asax.cs - ini adalah tempat default untuk konfigurasi rute ...

Michał Chaniewski
sumber
2

Atribut Routing di MVC 5

Sebelum MVC 5 Anda dapat memetakan URL ke tindakan dan pengontrol tertentu dengan memanggil routes.MapRoute(...)file RouteConfig.cs. Di sinilah url untuk beranda disimpan ( Home/Index). Namun jika Anda mengubah rute default seperti yang ditunjukkan di bawah ini,

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

perlu diingat bahwa ini akan memengaruhi URL tindakan dan pengontrol lain. Misalnya, jika Anda memiliki kelas pengontrol bernama ExampleControllerdan metode tindakan di dalamnya dipanggil DoSomething, maka url default yang diharapkan ExampleController/DoSomethingtidak akan berfungsi lagi karena rute default diubah.

Solusi untuk ini adalah tidak mengacaukan rute default dan membuat rute baru di file RouteConfig.cs untuk tindakan dan pengontrol lain seperti itu,

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

Sekarang DoSomethingtindakan ExampleControllerkelas akan dipetakan ke url hey/now. Tetapi ini bisa membosankan untuk dilakukan setiap kali Anda ingin menentukan rute untuk tindakan yang berbeda. Jadi di MVC 5 Anda sekarang dapat menambahkan atribut untuk mencocokkan url dengan tindakan seperti,

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
sumber
1

Saya mencoba jawabannya tetapi tidak berhasil untuk saya. Inilah yang akhirnya saya lakukan:

Buat pengontrol baru DefaultController. Dalam aksi indeks, saya menulis pengalihan satu baris:

return Redirect("~/Default.aspx")

Di RouteConfig.cs, ubah controller = "Default" untuk rute.

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
vickey1611
sumber
Anda mungkin lupa untuk menghilangkan kata "Controller" dalam nama controller, membuat rute default
amarax
0

Jika Anda tidak ingin mengubah router, cukup buka HomeController dan ubah MyNewViewHere di indeks seperti ini:

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