"RedirectToAction" kullanarak denetleyiciden bir karmaya yeniden yönlendirme


89

Merhaba Mvc Denetleyiciden bir çapa döndürmek istiyorum

Denetleyici adı = DefaultController;

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

Böylece dizine yönlendirildiğinde url

http://localhost/Default/#region

Böylece

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

Bunu şu şekilde yapıp yapamayacağınızı sormuyorum: URL'me nasıl bağlantı etiketi ekleyebilirim?



Yanıtlar:


134

Bu yolu buldum:

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

Ayrıca bu ayrıntılı yolu da kullanabilirsiniz:

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
Sen dahice bir eşsin! Burada yapmayı sonlandırdığım şey: yeni RedirectResult döndür (Url.Action ("Index", new {PKMvrEmployeeId = MvrId}) + "#region");
gizlendi

1
Redirect (..) yöntemini çağırmak yerine RedirectResult kullanmak için +1. MVC altında yayımlanan ve IIS6'da yeniden yönlendirmenin neden olduğu istisnalarla karşılaşabilirsiniz, çünkü bir istek zaten yönlendirilmiş olabilir veya bir alt eylemin parçası veya içerik zaten gönderilmiştir.
Jaans

2
MVC 5'te, RedirectToAction kullanılırken # karakterinden bir% 23'e çıkılıyor gibi görünüyor. Bunu yaşayan başka kimse yok mu?
jakejgordon

Benim için aynı yöntemi kullandığımda tekrar yukarı çıkıyor.
Zeeshan Ahmad Khalil

14

Harika cevap gdoron. İşte kullandığım başka bir yol (sadece buradaki mevcut çözümlere eklemek için).

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

Açıkçası, gdoron'un cevabı ile bu, bu basit durumda aşağıdaki şekilde daha temiz yapılabilir;

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

Eyleminiz farklı bir denetleyicide ise ilk seçenek iyi çalışır.
Chad Hedgcock

11

Nokta net çekirdekte basit bir yol

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

Yukarıdaki, / default / index # bölgesini verir . 3. parametre, bir # 'dan sonra eklediği parçadır .

Microsoft docs - ControllerBase


4

Squall'ın cevabını genişletmek için: Dize enterpolasyonu kullanmak daha temiz kod sağlar. Aynı zamanda farklı denetleyiciler üzerindeki eylemler için de çalışır.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.