Đặt “Trang chủ” trong Asp.Net MVC


105

Trong asp.net MVC, "trang chủ" (tức là tuyến đường hiển thị khi truy cập www.foo.com) được đặt thành Trang chủ / Chỉ mục.

  • Giá trị này được lưu trữ ở đâu?
  • Làm cách nào để thay đổi "trang chủ"?
  • Có điều gì thanh lịch hơn việc sử dụng RedirectToRoute () trong hành động Chỉ mục của bộ điều khiển gia đình không?

Tôi đã thử tìm kiếm Trang chủ / Chỉ mục trong dự án của mình và không thể tìm thấy tham chiếu, cũng như không thể thấy bất kỳ thứ gì trong IIS (6). Tôi đã xem trang default.aspx trong thư mục gốc, nhưng điều đó dường như không có tác dụng gì.

Cảm ơn

Câu trả lời:


150

Nhìn vào Default.aspx/Default.aspx.csvà Global.asax.cs

Bạn có thể thiết lập một tuyến đường mặc định:

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

Chỉ cần thay đổi tên Bộ điều khiển / Hành động thành mặc định mong muốn của bạn. Đó sẽ là tuyến đường cuối cùng trong Bảng định tuyến.


6
@NikolaiDante, bạn nên biến nhận xét đó thành một câu trả lời vì tôi suýt bỏ sót nó và nó nhanh hơn câu trả lời này. :) Cảm ơn
GazB

3
Trong MVC 5. nếu bạn có đăng nhập biểu mẫu, khi bạn nhấp vào đăng nhập trên trang chủ, sau đó nó sẽ vẫn chuyển hướng đến Bộ điều khiển nhà, không phải bộ điều khiển tùy chỉnh của bạn được chỉ định trong tuyến. hành động đăng ký sẽ làm điều tương tự. Vì vậy, ngoài việc thay đổi routeconfig, bạn cũng cần thay đổi một số mã nơi gọi RedirectionToAction ("Chỉ mục", "Trang chủ") và thay thế nó bằng bộ điều khiển và tên hành động của riêng bạn.
anIBMer

Cần chỉ ra rằng bạn có thể có nhiều tuyến đường . Đây có thể là mặc định của bạn với các tham số BLANK URL, nhưng bạn có thể muốn một tuyến đường thứ hai như url: "{controller}/{action}/{id}". Chỉ cần đặt tên khác cho các tuyến đường.
Jess

Câu trả lời này có thể phù hợp với bạn, nhưng nếu bạn cần nhiều tuyến đường, hãy xem tại đây stackoverflow.com/a/8470531/1804678
Jess

1
Câu trả lời này chỉ phù hợp với MVC 3 trở về trước. Hãy xem câu trả lời của tôi bên dưới để biết cách tiếp cận MVC 4 trở lên được khuyến nghị.
JTW

19

ASP.NET Core

Định tuyến được cấu hình trong Configurephương thức của Startuplớp. Để đặt "trang chủ", chỉ cần thêm phần sau. Điều này sẽ khiến người dùng được chuyển đến bộ điều khiển và hành động được xác định trong phương pháp MapRoute khi / nếu họ điều hướng đến URL cơ sở của trang web của bạn, tức là, trang web của bạn sẽ định tuyến người dùng đến trang web của bạn.com/foo/index:

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

Pre-ASP.NET Core

Sử dụng phương thức RegisterRoutes nằm trong App_Start / RouteConfig.cs (MVC 3 và 4) hoặc Global.asax.cs (MVC 1 và 2) như hình dưới đây. Điều này sẽ khiến người dùng được chuyển đến bộ điều khiển và hành động được xác định trong phương thức MapRoute nếu họ điều hướng đến URL cơ sở của trang web của bạn, tức là, trang web của bạn sẽ định tuyến người dùng đến trang web của bạn.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

Bước 1: Nhấp vào Tệp Global.asax trong Giải pháp của bạn.

Bước 2: Sau đó đi tới Định nghĩa của

RouteConfig.RegisterRoutes(RouteTable.Routes);

Bước 3: Thay đổi tên bộ điều khiển và tên chế độ xem

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

kiểm tra phương thức RegisterRoutes trong global.asax.cs - đó là nơi mặc định cho cấu hình tuyến đường ...


2

Định tuyến thuộc tính trong MVC 5

Trước MVC 5, bạn có thể ánh xạ URL tới các hành động và bộ điều khiển cụ thể bằng cách gọi routes.MapRoute(...)trong tệp RouteConfig.cs. Đây là nơi lưu trữ url cho trang chủ ( Home/Index). Tuy nhiên, nếu bạn sửa đổi tuyến đường mặc định như được hiển thị bên dưới,

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

hãy nhớ rằng điều này sẽ ảnh hưởng đến URL của các hành động và bộ điều khiển khác. Ví dụ: nếu bạn có một lớp bộ điều khiển được đặt tên ExampleControllervà một phương thức hành động bên trong nó được gọi DoSomething, thì url mặc định dự kiếnExampleController/DoSomething sẽ không hoạt động nữa vì tuyến mặc định đã bị thay đổi.

Một giải pháp cho việc này là không gây rối với tuyến đường mặc định và tạo các tuyến đường mới trong tệp RouteConfig.cs cho các hành động và bộ điều khiển khác như vậy,

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

Bây giờ DoSomethinghành động của ExampleControllerlớp sẽ được ánh xạ tới url hey/now. Nhưng điều này có thể trở nên tẻ nhạt khi bạn muốn xác định các tuyến đường cho các hành động khác nhau. Vì vậy, trong MVC 5 bây giờ bạn có thể thêm các thuộc tính để khớp url với các hành động như vậy,

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

Tôi đã thử câu trả lời nhưng nó không hiệu quả với tôi. Đây là những gì tôi đã kết thúc:

Tạo một bộ điều khiển mới DefaultController. Trong hành động lập chỉ mục, tôi đã viết chuyển hướng một dòng:

return Redirect("~/Default.aspx")

Trong RouteConfig.cs, thay đổi controller = "Mặc định" cho tuyến đường.

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

bạn có thể quên bỏ từ "Bộ điều khiển" trong tên của bộ điều khiển, tạo tuyến đường mặc định
amarax

0

Nếu bạn không muốn thay đổi bộ định tuyến, chỉ cần vào HomeController và thay đổi MyNewViewHere trong chỉ mục như sau:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.