วิธีตั้งค่า Default Controller ใน asp.net MVC 4 & MVC 5


106

ฉันจะตั้งค่า Default Controller สำหรับโปรเจ็กต์ASP.NET MVC 4 โดยไม่ต้องสร้างHomeController ได้อย่างไร

ฉันควรตั้งค่าพื้นที่เริ่มต้นอย่างไรเมื่อแอปพลิเคชันเริ่มทำงาน


เนื่องจากจะเปลี่ยนจาก "/" เป็น "/ home เป็นรูทเพจ" / home "นี้จะต้องปรากฏที่เบราว์เซอร์ของลูกค้า
Andre Mesquita

คำตอบ:


165

วิธีที่ดีที่สุดคือเปลี่ยนเส้นทาง เส้นทางเริ่มต้น (กำหนดไว้ใน App_Start ของคุณ) กำหนดไว้/Home/Index

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

เป็นหน้า Landing Page เริ่มต้น คุณสามารถเปลี่ยนเป็นเส้นทางใดก็ได้ที่คุณต้องการ

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

13
ใน MVC 4 เส้นทางเริ่มต้นถูกตั้งค่าใน App_Start / RouteConfig.cs
Eric Labashosky

จริงแท้แน่นอน. ฉันทำงานหนักในโครงการทั้งสองอย่างและมองข้ามสิ่งเหล่านี้ไป;)
Dave Alperovich

1
เดฟเป็นสิทธิ แต่ฉันต้องการที่จะเพิ่มว่าใน MVC 4 เส้นทางจะไม่ทำใน Global.asax แต่ในRouteConfig.csภายใต้App_Start
พลเมืองดี

2
จะทำให้ทำงานได้อย่างไรเมื่อคอนโทรลเลอร์ที่อ้างถึงในเส้นทางเริ่มต้นอยู่ในพื้นที่อื่น (เช่นไม่ใช่รูทหนึ่ง)
superjos

คุณควรจะสามารถกำหนดเส้นทางเริ่มต้นไปที่"AreaName/{controller}/{action}/{id}"
Dave Alperovich

30

ตั้งรหัสด้านล่างในRouteConfig.csในโฟลเดอร์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 });
}

หากยังใช้งานไม่ได้ให้ทำตามขั้นตอนด้านล่าง

วิธีที่สอง: คุณทำตามขั้นตอนด้านล่างง่ายๆ

1) คลิกขวาที่โครงการของคุณ

2) เลือกคุณสมบัติ

3) เลือกตัวเลือกเว็บจากนั้นเลือกหน้าเฉพาะ (ตัวควบคุม / มุมมอง) จากนั้นตั้งค่าหน้าเข้าสู่ระบบของคุณ

ที่นี่บัญชีคือผู้ควบคุมของฉันและการเข้าสู่ระบบเป็นวิธีการดำเนินการของฉัน (บันทึกไว้ในตัวควบคุมบัญชี)

โปรดดูใส่คำอธิบายภาพที่นี่ภาพหน้าจอที่แนบมา


15
"วิธีที่สอง" ของคุณเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณแก้ไขข้อบกพร่องโครงการเว็บของคุณ ไม่มีส่วนเกี่ยวข้องกับ "ตัวควบคุมเริ่มต้น" กล่าวคือหน้าใดจะปรากฏเมื่อคุณไปที่หน้า Landing Page ของไซต์ของคุณ
Martin Liversage

25

ฉันไม่เห็นคำถามนี้ตอบ:

ฉันควรตั้งค่าพื้นที่เริ่มต้นอย่างไรเมื่อแอปพลิเคชันเริ่มทำงาน

ดังนั้นนี่คือวิธีที่คุณสามารถตั้งค่าพื้นที่เริ่มต้น:

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

1
คำถามที่ดีทำไมคุณไม่สร้างมันขึ้นมา
stuartdotnet

'พื้นที่' คืออะไร? ถ้าฉันกำหนดมุมมองเค้าโครงที่อ้างอิงจะถูกโหลดหรือไม่แล้วคำขอ HTTP แยกต่างหากกับข้อมูลมุมมองของฉัน (เช่นการดำเนินการ Ajax แยกต่างหาก) หรือเค้าโครงแสดงผลและล้อมรอบมุมมองของฉันหรือไม่
Gus Crawford

2
@GusCrawford 'พื้นที่' คืออะไร? จากmsdn.microsoft.com/en-us/library/ee671793(VS.100).aspx : เพื่อรองรับโปรเจ็กต์ขนาดใหญ่ ASP.NET MVC ช่วยให้คุณแบ่งแอปพลิเคชันเว็บเป็นหน่วยขนาดเล็กที่เรียกว่าพื้นที่ พื้นที่เป็นวิธีในการแยกแอปพลิเคชันเว็บ MVC ขนาดใหญ่ออกเป็นกลุ่มการทำงานที่เล็กลง พื้นที่เป็นโครงสร้าง MVC ที่มีประสิทธิภาพภายในแอปพลิเคชัน แอปพลิเคชันอาจมีโครงสร้าง MVC หลายแบบ (พื้นที่)
Amna Ali

สำหรับคำถามอื่นฉันไม่คิดว่ามันเกี่ยวข้องกับคำตอบนี้และดูเหมือนจะไม่เกี่ยวข้องกับคำถามเดิมด้วยซ้ำ คุณควรโพสต์ไว้ที่อื่น
Amna Ali

ไม่ขอแยกกันในการตอบกระทู้ใหม่ขอบคุณสำหรับมุมมอง
Gus Crawford

2

ในกรณีที่คุณมีคอนโทรลเลอร์เพียงตัวเดียวและต้องการเข้าถึงทุกการกระทำบนรูทคุณสามารถข้ามชื่อคอนโทรลเลอร์เช่นนี้ได้

routes.MapRoute(
        "Default", 
        "{action}/{id}", 
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.