Alihkan ke hash dari pengontrol menggunakan "RedirectToAction"

89

Halo Saya ingin mengembalikan jangkar dari Mvc Controller

Nama pengontrol = DefaultController;

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

Sehingga url saat diarahkan ke index adalah

http://localhost/Default/#region

Yang seperti itu

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

Saya tidak bertanya apakah Anda bisa melakukannya seperti ini: Bagaimana cara menambahkan tag anchor ke URL saya?

tersembunyi
sumber

Jawaban:

134

Saya menemukan cara ini:

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

Anda juga dapat menggunakan cara verbose ini:

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

gdoron mendukung Monica
sumber
1
Anda adalah pasangan yang jenius! Di sini yang saya akhiri: return new RedirectResult (Url.Action ("Index", new {PKMvrEmployeeId = MvrId}) + "#region");
disembunyikan
1
1 untuk menggunakan RedirectResult daripada memanggil metode Redirect (..). Dalam MVC dalam rilis dan IIS6 Anda bisa berakhir dengan pengecualian yang disebabkan oleh pengalihan karena permintaan mungkin sudah dialihkan, atau bagian dari tindakan anak, atau konten sudah dikirim.
Jaans
2
Di MVC 5, saat menggunakan RedirectToAction, tampaknya # melarikan diri ke% 23. Apakah tidak ada orang lain yang mengalami ini?
jakejgordon
Bagi saya, ini akan kembali lagi jika saya menggunakan metode yang sama.
Zeeshan Ahmad Khalil
14

Jawaban bagus gdoron. Berikut cara lain yang saya gunakan (hanya untuk menambah solusi yang tersedia di sini).

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

Jelas, dengan jawaban gdoron ini dapat dibuat lebih bersih dengan yang berikut dalam kasus sederhana ini;

return new RedirectResult(Url.Action("Index") + "#anchor_hash");
Squall
sumber
Opsi pertama berfungsi dengan baik jika tindakan Anda ada di pengontrol yang berbeda.
Chad Hedgcock
11

Cara sederhana dalam inti dot net

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

Hasil di atas / default / index # region . Parameter ke-3 adalah fragmen yang ditambahkan setelah #.

Microsoft docs - ControllerBase

Dermot
sumber
4

Untuk memperluas jawaban Squall: Menggunakan interpolasi string membuat kode lebih bersih. Ini juga berfungsi untuk tindakan pada pengontrol yang berbeda.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
Jon T Inggris
sumber