จะเปลี่ยนเส้นทางไปยังดัชนีจากคอนโทรลเลอร์อื่นได้อย่างไร


129

ฉันพยายามหาวิธีเปลี่ยนเส้นทางไปยังIndexมุมมองจากตัวควบคุมอื่น

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

นี่คือสิ่งที่ฉันพยายามในตอนนี้ ตอนนี้รหัสที่ฉันได้รับมีActionLinkลิงค์ไปยังหน้าที่ฉันต้องการRedirectด้วย

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

คำตอบ:


272

ใช้โอเวอร์โหลดที่ใช้ชื่อคอนโทรลเลอร์ด้วย ...

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

และ

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

3
ตกลงมันได้ผล ฉันได้ลองสิ่งนี้ก่อนหน้านี้ต้องเป็นการพิมพ์ผิดเมื่อก่อนหน้านี้
cjohnson2136

2
เร็ว ๆ นี้ แต่มีตัวจับเวลาหยุดฉัน
cjohnson2136

อ่าสำหรับพวกเรามือใหม่ MVC สิ่งนี้มีประโยชน์มาก เพียงแค่เปลี่ยนเส้นทางไปยังมุมมองอื่นในโฟลเดอร์อื่นที่แสดงโดยตัวควบคุมอื่นก็ถูกส่งโดยฉันจนกว่าฉันจะอ่านสิ่งนี้
atconway

จะเปลี่ยนเส้นทางไปยังมุมมองที่ไม่มีตัวควบคุมได้อย่างไร? เช่นShared/Error
Dylan Czenski

28

ลอง:

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

และใน.cshtmlมุมมอง:

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

หรือ:

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

หรือ:

@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 */ })

แจ้งให้ทราบล่วงหน้าโดยใช้nullในการแสดงออกสุดท้ายจะไม่แนะนำและดีกว่าการใช้ที่ว่างเปล่าnew {}แทนnull


3
ในเรื่องการแจ้งให้ทราบล่วงหน้าของคุณสำหรับสิ่งที่มันเป็นเหตุผลที่ดีที่จะใช้new {}แทนnull?
musefan

16

คุณสามารถใช้รหัสต่อไปนี้:

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

โปรดดูRedirectToAction


ฉันลองแล้วก็ไม่ได้ผล มันทำให้ฉันไม่พบหน้าข้อผิดพลาด
cjohnson2136

ควรอยู่กับ "Controller": return RedirectToAction("Index", "Home");
Hiraeth

ฉันจำเป็นต้องใช้ "/ ดัชนี" มิฉะนั้นจะไม่พบ
code4j

@ code4j คุณกำหนดเส้นทางเริ่มต้นของคุณอย่างไร? คุณได้เพิ่มค่าเริ่มต้นสำหรับคอนโทรลเลอร์และการดำเนินการหรือไม่?
Wouter de Kort


1

คุณสามารถใช้การเปลี่ยนเส้นทางภายใน รหัสต่อไปนี้กำลังกระโดดไปที่หน้าดัชนีของ HomeController:

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

            return View();
        }
}

0

คำตอบที่สมบูรณ์ (.Net Core 3.1)

คำตอบส่วนใหญ่ที่นี่ถูกต้อง แต่นำมาจากบริบทเล็กน้อยดังนั้นฉันจะให้คำตอบที่ครบถ้วนซึ่งใช้ได้กับ Asp.Net Core 3.1 เพื่อความสมบูรณ์:

[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"
    }
}

หากคุณพยายามใช้สตริงเฉพาะ URL ใด ๆ เช่น"some_health_url"จะใช้ไม่ได้!

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