Başka bir denetleyicide Eyleme Yönlendirme


124

Her ikisi de aranan iki denetleyicim var AccountController. Bunlardan biri, onu arayalım Controller A, bir Areaçağrıda Adminve diğeri, onu arayalım Controller B, hiçbirinde değil Area(sanırım bu, varsayılan olarak Areamı?). Controller BBir gelmiştir action methoddenir Login. Bir var action methodin Controller Abu hattı vardır,

return RedirectToAction("LogIn", "Account");

Sorun Şey alabilir olmasıdır 404girişimi varolmayan yönlendirmek için yapılır çünkü bu hat yürütüldüğünde aldığında actionin Controller A. Ben aramak istiyorum action methodin Controller B. Mümkün mü?


Yanıtlar:


236

Sen sağlayabilmektedir areaiçinde routeValuesparametresi. Bunu dene:

return RedirectToAction("LogIn", "Account", new { area = "Admin" });

Veya

return RedirectToAction("LogIn", "Account", new { area = "" });

hangi alanı hedeflediğinize bağlı olarak.


Ya belirli bir alandaki bir görünümden, herhangi bir alanda olmayan bir denetleyicinin eylemine geçmek istersem. MVC5'te olduğu gibi, sağ üstteki LogOff düğmesi, herhangi bir alanda bulunmayan AccountController'dedir. Ve belirli bir alandaki bir görünümden Oturum Kapatmak istiyorum ???
Awais Mahmood

1
İkinci örneğim, area = ""bunu sizin için yapacak.
Rory McCrossan

Bu benim için ASP.NET Core ile çalıştı .... En son sürüme yükselttiğimde RedirectToAction bozuldu ve alanı boş bir dizeyle alan = "" kullanarak çalışmasını sağladım.
Jonathan Alfaro

28

Bunu kullan:

return RedirectToAction("LogIn", "Account", new { area = "" });

Bu, içindeki LogIneyleme yönlendirecektir .Account , "global" alandaki denetleyicideki .

Bu RedirectToActionaşırı yüklemeyi kullanıyor :

protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    string controllerName,
    Object routeValues
)

MSDN


9

Bunu kullanabilirsiniz:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });

2

Bunu kullan:

    return this.RedirectToAction<AccountController>(m => m.LogIn());

1
Konsepti beğendim. RedirectToAction'ın dize kısmından her zaman nefret etmişimdir ve girdiğinize daha çok benzemesi gerektiğini düşünmüşümdür, ancak bu c # 'ı kızdırıyor gibi görünüyor. Bu, 4.6.2'den daha yeni çerçevelerde mi?
user3071434

@ user3071434 Hayır, "Microsoft.Web.Mvc kullanarak" ekleyerek kullanabilirsiniz. yanlış Eylem metni nedeniyle dize kısmından kaçınabilir ve çalışma süresinde bir hata almayı azaltabilirsiniz
Hiren Patel

0

Bunları değiştirmeyi deneyin:

return RedirectToAction("Account", "Login");

Ben denedim ve işe yaradı.

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.