Làm cách nào để chuyển hướng đến Index từ bộ điều khiển khác?


129

Tôi đã xem qua việc cố gắng tìm một số cách để chuyển hướng đến một Indexkhung nhìn từ một bộ điều khiển khác.

public ActionResult Index()
{                
     ApplicationController viewModel = new ApplicationController();
     return RedirectToAction("Index", viewModel);
}

Đây là những gì tôi đã cố gắng ngay bây giờ. Bây giờ mã tôi đã được cung cấp để có một ActionLinkliên kết đến trang tôi cũng cần Redirect.

@Html.ActionLink("Bally Applications","../Application")

Câu trả lời:


272

Sử dụng quá tải lấy tên bộ điều khiển quá ...

return RedirectToAction("Index", "MyController");

@Html.ActionLink("Link Name","Index", "MyController", null, null)

3
Ok cái này hoạt động. Tôi đã thử điều này sớm hơn phải là một lỗi đánh máy khi tôi đã làm nó trước đây.
cjohnson2136

2
đã làm điều đó sớm hơn nhưng có một bộ đếm thời gian ngăn tôi lại
cjohnson2136

Ahh, đối với chúng tôi những người mới sử dụng MVC, điều này cực kỳ hữu ích. Chỉ cần chuyển hướng đến một chế độ xem khác trong một thư mục khác được đại diện bởi một bộ điều khiển khác là tôi nhận được cho đến khi tôi đọc được điều này.
atconway

Làm thế nào để chuyển hướng đến một khung nhìn mà không có bộ điều khiển? chẳng hạn nhưShared/Error
Dylan Cundredki

28

thử:

public ActionResult Index() {
    return RedirectToAction("actionName");
    // or
    return RedirectToAction("actionName", "controllerName");
    // or
    return RedirectToAction("actionName", "controllerName", new {/* routeValues, for example: */ id = 5 });
}

và theo .cshtmlquan điểm:

@Html.ActionLink("linkText","actionName")

HOẶC LÀ:

@Html.ActionLink("linkText","actionName","controllerName")

HOẶC LÀ:

@Html.ActionLink("linkText", "actionName", "controllerName", 
    new { /* routeValues forexample: id = 6 or leave blank or use null */ }, 
    new { /* htmlAttributes forexample: @class = "my-class" or leave blank or use null */ })

Thông báo sử dụng nulltrong biểu thức cuối cùng không được khuyến nghị và tốt hơn là sử dụng khoảng trống new {}thay vìnull


3
Liên quan đến thông báo của bạn, vì lý do gì tốt hơn là sử dụng new {}thay vì null?
musefan

16

Bạn có thể sử dụng mã sau đây:

return RedirectToAction("Index", "Home");

Xem RedirectToAction


Tôi đã thử điều đó và nó đã không hoạt động. Nó đã cho tôi trang không thể tìm thấy lỗi
cjohnson2136

nên có với "Người điều khiển": return RedirectToAction("Index", "Home");
Hiraeth

Tôi cần sử dụng "/ Index" nếu không không tìm thấy
code4j

@ code4j bạn đã xác định tuyến đường mặc định của mình như thế nào? Bạn đã thêm các giá trị mặc định cho bộ điều khiển và hành động?
Wouter de Kort

2

Bạn có thể sử dụng phương pháp quá tải RedirectToAction(string actionName, string controllerName);

Thí dụ:

RedirectToAction(nameof(HomeController.Index), "Home");

1

Bạn có thể sử dụng chuyển hướng địa phương. Các mã sau đang nhảy trang Chỉ mục của HomeContoder:

public class SharedController : Controller
    {
        // GET: /<controller>/
        public IActionResult _Layout(string btnLogout)
        {
            if (btnLogout != null)
            {
                return LocalRedirect("~/Index");
            }

            return View();
        }
}

0

Câu trả lời hoàn chỉnh (.Net Core 3.1)

Hầu hết các câu trả lời ở đây đều đúng nhưng được đưa ra một chút khỏi ngữ cảnh, vì vậy tôi sẽ cung cấp một câu trả lời đầy đủ, phù hợp với Asp.Net Core 3.1. Vì sự trọn vẹn:

[Route("health")]
[ApiController]
public class HealthController : Controller
{
    [HttpGet("some_health_url")]
    public ActionResult SomeHealthMethod() {}
}

[Route("v2")]
[ApiController]
public class V2Controller : Controller
{
    [HttpGet("some_url")]
    public ActionResult SomeV2Method()
    {
        return RedirectToAction("SomeHealthMethod", "Health"); // omit "Controller"
    }
}

Nếu bạn cố gắng sử dụng bất kỳ chuỗi cụ thể url nào, ví dụ: "some_health_url"nó sẽ không hoạt động!

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.