เปลี่ยนเส้นทางไปยังแฮชจากคอนโทรลเลอร์โดยใช้“ RedirectToAction”


90

สวัสดีฉันต้องการคืนจุดยึดจาก Mvc Controller

ชื่อคอนโทรลเลอร์ = DefaultController;

public ActionResult MyAction(int id)
{
        return RedirectToAction("Index", "region")
}

ดังนั้น url เมื่อนำไปที่ดัชนีคือ

http://localhost/Default/#region

ดังนั้น

<a href=#region>the content should be focus here</a>

ฉันไม่ได้ถามว่าคุณจะทำแบบนี้ได้ไหม: ฉันจะเพิ่ม Anchor tag ใน URL ของฉันได้อย่างไร



คำตอบ:


134

ฉันพบวิธีนี้:

public ActionResult MyAction(int id)
{
    return new RedirectResult(Url.Action("Index") + "#region");
}

คุณยังสามารถใช้วิธี verbose นี้:

var url = UrlHelper.GenerateUrl(
    null,
    "Index",
    "DefaultController",
    null,
    null,
    "region",
    null,
    null,
    Url.RequestContext,
    false
);
return Redirect(url);

http://msdn.microsoft.com/en-us/library/ee703653.aspx


1
คุณเป็นเพื่อนที่ใจดี! สิ่งที่ฉันทำเสร็จแล้ว: ส่งคืน RedirectResult ใหม่ (Url.Action ("ดัชนี" ใหม่ {PKMvrEmployeeId = MvrId}) + "#region");
ซ่อนไว้

1
+1 สำหรับการใช้ RedirectResult แทนการเรียกเมธอด Redirect (.. ) ใน MVC ภายใต้การเปิดตัวและ IIS6 คุณสามารถจบลงด้วยข้อยกเว้นที่เกิดจากการเปลี่ยนเส้นทางเนื่องจากอาจมีการเปลี่ยนเส้นทางคำขอไปแล้วหรือเป็นส่วนหนึ่งของการดำเนินการย่อยหรือส่งเนื้อหาไปแล้ว
Jaans

2
ใน MVC 5 เมื่อใช้ RedirectToAction ดูเหมือนว่าจะหนีจาก # ไปเป็น% 23 ไม่มีใครประสบปัญหานี้อีกหรือ?
jakejgordon

สำหรับฉันมันจะกลับมาอีกครั้งเมื่อฉันใช้วิธีเดิม
Zeeshan Ahmad Khalil

14

คำตอบที่ดี gdoron นี่เป็นอีกวิธีหนึ่งที่ฉันใช้ (เพื่อเพิ่มโซลูชันที่มีอยู่ที่นี่)

return Redirect(String.Format("{0}#{1}", Url.RouteUrl(new { controller = "MyController", action = "Index" }), "anchor_hash");

เห็นได้ชัดว่าด้วยคำตอบของ gdoron สิ่งนี้สามารถทำให้สะอาดขึ้นได้ด้วยสิ่งต่อไปนี้ในกรณีง่ายๆนี้

return new RedirectResult(Url.Action("Index") + "#anchor_hash");

ตัวเลือกแรกจะทำงานได้ดีหากการกระทำของคุณอยู่ในตัวควบคุมอื่น
Chad Hedgcock

12

วิธีง่ายๆใน dot net core

public IActionResult MyAction(int id)
{
    return RedirectToAction("Index", "default", "region");
}

อัตราผลตอบแทน/ ค่าเริ่มต้น / ดัชนี # ภูมิภาคข้างต้น พารามิเตอร์ตัวที่3 คือแฟรกเมนต์ที่เพิ่มหลัง #

Microsoft Docs - ControllerBase


4

หากต้องการขยายคำตอบของ Squall: การใช้การแก้ไขสตริงทำให้โค้ดสะอาดขึ้น นอกจากนี้ยังใช้ได้กับการดำเนินการกับคอนโทรลเลอร์ที่แตกต่างกัน

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.