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?



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


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");

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


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");
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.