ตั้งค่า“ โฮมเพจ” ใน Asp.Net MVC


105

ใน asp.net MVC "โฮมเพจ" (กล่าวคือเส้นทางที่แสดงเมื่อกดปุ่ม www.foo.com) เป็น Home / Index

  • ค่านี้เก็บไว้ที่ไหน?
  • ฉันจะเปลี่ยน "หน้าแรก" ได้อย่างไร?
  • จะมีอะไรที่หรูหราไปกว่าการใช้ RedirectToRoute () ใน Index action ของ home controller หรือไม่?

ฉันลอง grepping สำหรับ Home / Index ในโครงการของฉันแล้วไม่พบข้อมูลอ้างอิงและไม่เห็นอะไรเลยใน IIS (6) ฉันดูที่หน้า default.aspx ในรูท แต่ดูเหมือนจะไม่เกี่ยวข้องอะไรเลย

ขอบคุณ

คำตอบ:


150

ดูDefault.aspx/Default.aspx.csและ Global.asax.cs

คุณสามารถตั้งค่าเส้นทางเริ่มต้น:

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

เพียงแค่เปลี่ยนชื่อ Controller / Action เป็นค่าเริ่มต้นที่คุณต้องการ นั่นควรเป็นเส้นทางสุดท้ายในตารางเส้นทาง


6
@NikolaiDante คุณควรให้ความคิดเห็นนั้นเป็นคำตอบเพราะฉันเกือบพลาดและเร็วกว่าคำตอบนี้ :) ขอบคุณ
GazB

3
ใน MVC 5. หากคุณมีการเข้าสู่ระบบแบบฟอร์มเมื่อคุณคลิกเข้าสู่ระบบในโฮมเพจระบบจะยังคงเปลี่ยนเส้นทางไปยังตัวควบคุมบ้านไม่ใช่ตัวควบคุมที่กำหนดเองของคุณที่ระบุไว้ในเส้นทาง การดำเนินการลงทะเบียนจะทำสิ่งที่คล้ายกัน ดังนั้นนอกเหนือจากการเปลี่ยน Routeconfig แล้วยังต้องเปลี่ยนโค้ดบางตัวที่เรียก RedirectionToAction ("Index", "Home") และแทนที่ด้วยคอนโทรลเลอร์และชื่อการดำเนินการของคุณเอง
anIBMer

มันคุ้มค่าที่ชี้ให้เห็นว่าคุณสามารถมีหลายวิถีทาง ซึ่งอาจเป็นค่าเริ่มต้นของคุณด้วยพารามิเตอร์ URL เปล่า url: "{controller}/{action}/{id}"แต่คุณอาจต้องการเส้นทางที่สองเช่น เพียงตั้งชื่อเส้นทางให้แตกต่างกัน
Jess

คำตอบนี้อาจเหมาะกับคุณ แต่ถ้าคุณต้องการหลายเส้นทางโปรดดูที่นี่stackoverflow.com/a/8470531/1804678
Jess

1
คำตอบนี้เหมาะสำหรับ MVC 3 และรุ่นก่อนหน้าเท่านั้น ดูคำตอบของฉันด้านล่างสำหรับแนวทาง MVC 4 และใหม่กว่าที่แนะนำ
JTW

20

ASP.NET Core

การกำหนดเส้นทางถูกกำหนดค่าในConfigureวิธีการของStartupคลาส หากต้องการตั้งค่า "หน้าแรก" ให้เพิ่มสิ่งต่อไปนี้ สิ่งนี้จะทำให้ผู้ใช้ถูกกำหนดเส้นทางไปยังตัวควบคุมและการดำเนินการที่กำหนดไว้ในเมธอด MapRoute เมื่อ / ถ้าพวกเขาไปที่ URL พื้นฐานของไซต์ของคุณนั่นคือ yoursite.com จะนำผู้ใช้ไปยัง yoursite.com/foo/index:

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

Pre-ASP.NET Core

ใช้เมธอด RegisterRoutes ที่อยู่ใน App_Start / RouteConfig.cs (MVC 3 และ 4) หรือ Global.asax.cs (MVC 1 และ 2) ดังที่แสดงด้านล่าง สิ่งนี้จะทำให้ผู้ใช้ถูกกำหนดเส้นทางไปยังตัวควบคุมและการดำเนินการที่กำหนดไว้ในเมธอด MapRoute หากพวกเขาไปที่ URL พื้นฐานของไซต์ของคุณนั่นคือ yoursite.com จะกำหนดเส้นทางผู้ใช้ไปยัง yoursite.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 }
    );
}

5

ขั้นตอนที่ 1: คลิกที่ไฟล์ Global.asax ในโซลูชันของคุณ

ขั้นตอนที่ 2: จากนั้นไปที่คำจำกัดความของ

RouteConfig.RegisterRoutes(RouteTable.Routes);

ขั้นตอนที่ 3: เปลี่ยนชื่อคอนโทรลเลอร์และชื่อมุมมอง

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

ตรวจสอบวิธี RegisterRoutes ใน global.asax.cs - เป็นตำแหน่งเริ่มต้นสำหรับการกำหนดค่าเส้นทาง ...


2

Attribute Routing ใน MVC 5

ก่อน MVC 5 คุณสามารถแมป URL กับroutes.MapRoute(...)แอ็คชันและคอนโทรลเลอร์เฉพาะได้โดยเรียกในไฟล์ RouteConfig.cs นี่คือที่เก็บ url สำหรับโฮมเพจ ( Home/Index) อย่างไรก็ตามหากคุณแก้ไขเส้นทางเริ่มต้นตามที่แสดงด้านล่าง

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

โปรดทราบว่าสิ่งนี้จะส่งผลต่อ URL ของการดำเนินการและตัวควบคุมอื่น ๆ ตัวอย่างเช่นหากคุณมีชื่อคลาสคอนโทรลเลอร์ExampleControllerและมีการเรียกใช้วิธีการดำเนินการภายในDoSomethingนั้น url เริ่มต้นที่คาดไว้ExampleController/DoSomethingจะไม่ทำงานอีกต่อไปเนื่องจากเส้นทางเริ่มต้นมีการเปลี่ยนแปลง

วิธีแก้ปัญหาสำหรับวิธีนี้คืออย่ายุ่งกับเส้นทางเริ่มต้นและสร้างเส้นทางใหม่ในไฟล์ RouteConfig.cs สำหรับการดำเนินการและตัวควบคุมอื่น ๆ เช่นนั้น

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

ตอนนี้DoSomethingการกระทำของExampleControllerชั้นจะถูกแมปไปยัง hey/nowURL แต่สิ่งนี้อาจเป็นเรื่องน่าเบื่อที่ต้องทำทุกครั้งที่คุณต้องการกำหนดเส้นทางสำหรับการกระทำต่างๆ ดังนั้นใน MVC 5 ตอนนี้คุณสามารถเพิ่มแอตทริบิวต์เพื่อจับคู่ URL กับการกระทำเช่นนั้นได้

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

ฉันลองคำตอบแล้ว แต่มันไม่ได้ผลสำหรับฉัน นี่คือสิ่งที่ฉันทำ:

สร้างคอนโทรลเลอร์ใหม่ DefaultController ในการดำเนินการดัชนีฉันเขียนการเปลี่ยนเส้นทางหนึ่งบรรทัด:

return Redirect("~/Default.aspx")

ใน RouteConfig.cs เปลี่ยนตัวควบคุม = "ค่าเริ่มต้น" สำหรับเส้นทาง

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

คุณอาจลืมที่จะละเว้นคำ "Controller" ในชื่อของตัวควบคุมการสร้างเส้นทางเริ่มต้น
amarax

0

หากคุณไม่ต้องการเปลี่ยนเราเตอร์เพียงไปที่ HomeController แล้วเปลี่ยน MyNewViewHere ในดัชนีดังนี้:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.