ASP.Net MVC เปลี่ยนเส้นทางไปยังมุมมองอื่น


89

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

ตัวอย่างเช่นคอนโทรลเลอร์ทั้งหมดของฉันสืบทอดมาจากคอนโทรลเลอร์แบบกำหนดเองที่มีตัวสร้างที่ฉันต้องการเปลี่ยนเส้นทางไปยังมุมมองอื่นหากไม่ตรงตามเกณฑ์บางอย่าง หวังว่าจะสมเหตุสมผล

คำตอบ:


147

คุณสามารถใช้RedirectToAction()วิธีนี้จากนั้นการดำเนินการที่คุณเปลี่ยนเส้นทางจะสามารถส่งคืนมุมมอง วิธีที่ง่ายที่สุดคือ:

return RedirectToAction("Index", model);

จากนั้นในวิธี Index ของคุณให้ส่งกลับมุมมองที่คุณต้องการ


1
ถ้าฉันทำด้วยวิธีนี้ฉันจะคืนมุมมองเฉพาะจากการดำเนินการของคอนโทรลเลอร์ได้อย่างไร
Gavin

11
@Craig - มุมมองย้อนกลับไม่ทำการเปลี่ยนเส้นทางและ URL จะเหมือนเดิม ดังนั้นหากคุณอยู่ที่ "/ edit / MyItem" การคืน View ("showitem") จะทำให้คุณมีมุมมอง "showitem" พร้อมด้วย URL "/ edit /" ขึ้นอยู่กับสถานการณ์ของคุณสิ่งนี้สามารถใช้ได้ แต่ไม่เสมอไป
jeffreypriebe

5
@jeffrey นั่นคือสองขั้นตอนแยกกัน: เปลี่ยนเส้นทางในการดำเนินการแรกตามที่ John กล่าวจากนั้นกลับ View ในขั้นตอนที่สอง การดำเนินการแรกไม่สามารถบอกได้ว่าควรใช้มุมมองใด
Craig Stuntz

@ Craig ที่ช่วยหน่อย. มี "การกระทำ" และ "มุมมอง" - สองสิ่งที่แยกจากกัน เหตุใดคำตอบของฉันด้านล่างจึงใช้งานได้: RedirectToAction - ไม่มีการเปลี่ยนแปลงมุมมอง ฉันแน่ใจว่านี่คือ. net MVC 101 แต่ฉันไม่เข้าใจ ขอบคุณ.
jeffreypriebe

เพื่อความสมบูรณ์ ASP.Net MVC จะออก HTTP Status Code 302 เพื่อทำให้การเปลี่ยนเส้นทางเกิดขึ้น
aboy021

20
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }

2
สิ่งนี้ใช้การดำเนินการควบคุมเดียวกัน RedirectToAction เรียกการดำเนินการอื่น นี่เป็นวิธีที่ง่ายที่สุดสำหรับฉัน
RaoulRubin

6

วิธีที่ง่ายที่สุดคือใช้ return View

return View("ViewName");

โปรดจำไว้ว่าชื่อจริงของ "ViewName" ควรเป็นชื่อ ViewName.cshtml ในโปรเจ็กต์ของคุณหากคุณใช้ MVC C # / .NET


4

ฉันไม่แน่ใจ 100% ว่าเงื่อนไขนี้คืออะไร แต่สำหรับฉันข้างต้นไม่ได้ผลโดยตรงคิดว่ามันใกล้เข้ามาแล้ว ฉันคิดว่าเป็นเพราะฉันต้องการ "id" สำหรับมุมมองของฉันโดยในโมเดลเรียกว่า "ObjectID"

ฉันมีโมเดลที่มีข้อมูลมากมาย ฉันแค่ต้องการรหัส

ก่อนหน้านี้ฉันได้สร้างออบเจ็กต์ System.Web.Routing.RouteValueDictionary ใหม่และเพิ่ม id ที่ต้องการ

(System.Web.Routing.)RouteValueDictionary RouteInfo = new RouteValueDictionary();
RouteInfo.Add("id", ObjectID);
return RedirectToAction("details", RouteInfo);

(หมายเหตุ: โครงการ MVC ที่เป็นปัญหาที่ฉันไม่ได้สร้างดังนั้นฉันจึงไม่รู้ว่าบิตที่ "ยุ่ง" อยู่ตรงไหน)


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