เปลี่ยนเส้นทางไปที่ Action ในคอนโทรลเลอร์อื่น


124

AccountControllerฉันมีสองตัวควบคุมทั้งที่เรียกว่า หนึ่งในนั้นให้เรียกว่าController Aอยู่ในการAreaโทรAdminและอีกอันให้เรียกว่าController Bไม่อยู่ในใด ๆArea(ฉันเดาว่านั่นหมายความว่าเป็นค่าเริ่มต้นArea?) Controller Bมียอดที่เรียกว่าaction method Loginฉันมีaction methodอินController Aซึ่งมีบรรทัดนี้

return RedirectToAction("LogIn", "Account");

ปัญหาคือฉันได้รับ404เมื่อบรรทัดนี้ถูกดำเนินการเนื่องจากมีความพยายามที่จะเปลี่ยนเส้นทางไปยังสิ่งที่ไม่มีอยู่actionในController A. ฉันต้องการที่จะเรียกในaction method Controller Bเป็นไปได้หรือไม่


2
อาจซ้ำกันได้ของMVC Redirect ไปยัง Index จาก Controller อื่น
musefan

คำตอบ:


236

คุณสามารถระบุareaในrouteValuesพารามิเตอร์ ลองสิ่งนี้:

return RedirectToAction("LogIn", "Account", new { area = "Admin" });

หรือ

return RedirectToAction("LogIn", "Account", new { area = "" });

ขึ้นอยู่กับพื้นที่ที่คุณต้องการ


จะเป็นอย่างไรหากฉันต้องการเปลี่ยนจากมุมมองในพื้นที่หนึ่งไปสู่การทำงานของคอนโทรลเลอร์ที่ไม่ได้อยู่ในพื้นที่ใด ๆ เช่นเดียวกับใน MVC5 ปุ่ม LogOff ที่ด้านขวาบนอยู่ใน AccountController ซึ่งไม่ได้อยู่ในพื้นที่ใด ๆ และฉันต้องการ LogOff จากมุมมองในบางพื้นที่ ???
Awais Mahmood

1
ตัวอย่างที่สองของฉันarea = ""จะทำเพื่อคุณ
Rory McCrossan

สิ่งนี้ใช้ได้กับฉันกับ ASP.NET Core .... เมื่อฉันอัปเกรดเป็นเวอร์ชันล่าสุด RedirectToAction พังและฉันทำให้มันทำงานโดยใช้พื้นที่ = "" ด้วยสตริงว่างเปล่า
Jonathan Alfaro

28

ใช้สิ่งนี้:

return RedirectToAction("LogIn", "Account", new { area = "" });

การดำเนินการนี้จะเปลี่ยนเส้นทางไปยังการLogInดำเนินการในAccountตัวควบคุมในพื้นที่ "ส่วนกลาง"

มันใช้งานRedirectToActionเกินพิกัดนี้:

protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    string controllerName,
    Object routeValues
)

MSDN



2

ใช้สิ่งนี้:

    return this.RedirectToAction<AccountController>(m => m.LogIn());

1
ฉันชอบแนวคิด ฉันเกลียดส่วนสตริงของ RedirectToAction มาตลอดและคิดว่ามันน่าจะเหมือนกับสิ่งที่คุณป้อนมากกว่า แต่ดูเหมือนจะทำให้โกรธ c # นี่เป็นเฟรมเวิร์กที่ใหม่กว่า 4.6.2 หรือไม่
user3071434

@ user3071434 ไม่ได้คุณสามารถใช้กับการเพิ่ม "using Microsoft.Web.Mvc" ได้ คุณสามารถหลีกเลี่ยงส่วนสตริงและลดการได้รับข้อผิดพลาดบนรันไทม์เนื่องจากข้อความการดำเนินการที่ไม่ถูกต้อง
Hiren Patel

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