Cara mengatur Kontroler Default di asp.net MVC 4 & MVC 5

106

Bagaimana cara menetapkan Pengontrol Default untuk proyek ASP.NET MVC 4 saya tanpa menjadikannya HomeController ?

Bagaimana saya harus mengatur Area default saat aplikasi dimulai?

Adrian10 BEN
sumber
seperti akan mengubah dari "/" menjadi "/ home sebagai halaman root?" / home "ini harus terlihat di browser pelanggan.
Andre Mesquita

Jawaban:

165

cara terbaik adalah dengan mengubah rute Anda. Rute default (ditentukan dalam App_Start Anda) set/Home/Index

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

sebagai halaman arahan default. Anda dapat mengubahnya menjadi rute yang Anda inginkan.

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Sales", action = "ProjectionReport", 
        id = UrlParameter.Optional }
);
Dave Alperovich
sumber
13
Di MVC 4, rute default disetel di App_Start / RouteConfig.cs
Eric Labashosky
Sangat benar. Saya saat ini mengerjakan proyek di keduanya dan mengabaikan hal-hal ini;)
Dave Alperovich
1
Dave benar, tapi saya ingin menambahkan bahwa di MVC 4 perutean tidak lagi dilakukan di Global.asax, melainkan di RouteConfig.cs di bawah App_Start .
Orang Samaria yang Baik
2
Bagaimana membuat itu bekerja ketika pengontrol yang direferensikan dalam rute default berada di area lain (yaitu bukan yang root)?
superjos
Anda harus dapat membuat rute default ke"AreaName/{controller}/{action}/{id}"
Dave Alperovich
30

Tetapkan kode di bawah ini di RouteConfig.cs di folder App_Start

public static void RegisterRoutes(RouteCollection routes)
{
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 routes.MapRoute(
 name: "Default",
 url: "{controller}/{action}/{id}",
 defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional });
}

JIKA masih tidak berhasil maka lakukan langkah-langkah di bawah ini

Cara Kedua: Anda cukup mengikuti langkah-langkah di bawah ini,

1) Klik kanan pada Proyek Anda

2) Pilih Properties

3) Pilih opsi Web, lalu Pilih Halaman Tertentu (Kontroler / Tampilan), lalu setel halaman login Anda

Di sini, Akun adalah pengontrol saya dan Login adalah metode tindakan saya (disimpan di Pengontrol Akun)

Silakan lihat masukkan deskripsi gambar di sinitangkapan layar terlampir .

Nimesh
sumber
15
"Cara kedua" Anda adalah tentang apa yang terjadi saat Anda men-debug proyek web Anda. Ini tidak ada hubungannya dengan "pengontrol default", yaitu halaman apa yang ditampilkan saat Anda menavigasi ke halaman arahan situs Anda.
Martin Liversage
25

Saya tidak melihat pertanyaan ini dijawab:

Bagaimana saya harus mengatur Area default saat aplikasi dimulai?

Jadi, inilah cara Anda mengatur Area default:

var route = routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    ).DataTokens = new RouteValueDictionary(new { area = "MyArea" });
Amna Ali
sumber
1
pertanyaan yang bagus, mengapa Anda tidak membuatnya menjadi satu?
stuartdotnet
Apa itu 'Area'? Jika saya mendefinisikan Tampilan, apakah tata letak yang direferensikan dimuat, lalu permintaan HTTP terpisah dengan data tampilan saya? (yaitu operasi Ajax terpisah) atau apakah tata letak diberikan dan dibungkus di sekitar tampilan saya?
Gus Crawford
2
@GusCrawford Apa itu 'Area'? Dari msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx : Untuk mengakomodasi proyek-proyek besar, ASP.NET MVC memungkinkan Anda mempartisi aplikasi Web menjadi unit-unit yang lebih kecil yang disebut sebagai area. Area menyediakan cara untuk memisahkan aplikasi MVC Web yang besar menjadi pengelompokan fungsional yang lebih kecil. Suatu area secara efektif merupakan struktur MVC di dalam aplikasi. Sebuah aplikasi bisa berisi beberapa struktur MVC (area).
Amna Ali
Sedangkan untuk pertanyaan lainnya, menurut saya tidak ada hubungannya dengan jawaban ini, dan sepertinya tidak relevan bahkan dengan pertanyaan aslinya. Mungkin, Anda harus mempostingnya di tempat lain.
Amna Ali
Saya akan bertanya secara terpisah di utas baru, terima kasih atas perspektifnya.
Gus Crawford
2

Jika Anda hanya memiliki satu pengontrol dan Anda ingin mengakses setiap tindakan di root, Anda dapat melewati nama pengontrol seperti ini

routes.MapRoute(
        "Default", 
        "{action}/{id}", 
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);
Manjoor
sumber