Başka bir denetleyiciden Dizine nasıl yönlendirilirim?


129

IndexBaşka bir denetleyiciden bir görünüme yönlendirmenin bir yolunu bulmaya çalışıyorum .

public ActionResult Index()
{                
     ApplicationController viewModel = new ApplicationController();
     return RedirectToAction("Index", viewModel);
}

Şu anda denediğim şey buydu. Şimdi bana verilen kodda ActionLinkihtiyacım olan sayfaya bağlantı veren bir bağlantı var Redirect.

@Html.ActionLink("Bally Applications","../Application")

Yanıtlar:


272

Denetleyici adını da alan aşırı yüklemeleri kullanın ...

return RedirectToAction("Index", "MyController");

ve

@Html.ActionLink("Link Name","Index", "MyController", null, null)

3
Tamam bu çalıştı. Bunu daha önce denedim, daha önce yaptığımda bir yazım hatası olmalı.
cjohnson2136

2
bu daha erken olur muydu ama beni durduran bir zamanlayıcı vardı
cjohnson2136

Ahh, MVC yeni başlayanlar için bu son derece yardımcı oldu. Ben bunu okuyana kadar sadece farklı bir denetleyicinin temsil ettiği farklı bir klasördeki başka bir görünüme yönlendirmek benim tarafımdan geliyordu.
atconway

denetleyici olmadan bir görünüme nasıl yönlendirme yapılır? örneğinShared/Error
Dylan Czenski

28

Deneyin:

public ActionResult Index() {
    return RedirectToAction("actionName");
    // or
    return RedirectToAction("actionName", "controllerName");
    // or
    return RedirectToAction("actionName", "controllerName", new {/* routeValues, for example: */ id = 5 });
}

ve .cshtmlgörünümde:

@Html.ActionLink("linkText","actionName")

VEYA:

@Html.ActionLink("linkText","actionName","controllerName")

VEYA:

@Html.ActionLink("linkText", "actionName", "controllerName", 
    new { /* routeValues forexample: id = 6 or leave blank or use null */ }, 
    new { /* htmlAttributes forexample: @class = "my-class" or leave blank or use null */ })

Uyarı kullanarak nullnihai ifadede tavsiye ve boş kullanmak daha iyidir değildir new {}yerinenull


3
Bildiriminizle ilgili olarak, hangi nedenle new {}yerine kullanmak daha iyidir null?
musefan

16

Aşağıdaki kodu kullanabilirsiniz:

return RedirectToAction("Index", "Home");

RedirectToAction'a bakın


Bunu denedim ve işe yaramadı. Bana sayfa bulunamadı hatası verdi
cjohnson2136

"Denetleyici" ile olmalıdır:return RedirectToAction("Index", "Home");
Hiraeth

"/ Index" i kullanmam gerekiyor, aksi halde bulunamadı
code4j

@ code4j varsayılan rotalarınızı nasıl tanımladınız? Denetleyici ve eylem için varsayılan değerler eklediniz mi?
Wouter de Kort

2

Aşırı yükleme yöntemini kullanabilirsiniz RedirectToAction(string actionName, string controllerName);

Misal:

RedirectToAction(nameof(HomeController.Index), "Home");

1

Yerel yönlendirmeyi kullanabilirsiniz. Aşağıdaki kodlar HomeController'in İndeks sayfasına atlıyor:

public class SharedController : Controller
    {
        // GET: /<controller>/
        public IActionResult _Layout(string btnLogout)
        {
            if (btnLogout != null)
            {
                return LocalRedirect("~/Index");
            }

            return View();
        }
}

0

Tam cevap (.Net Core 3.1)

Buradaki çoğu cevap doğrudur, ancak biraz bağlam dışında alınmıştır, bu nedenle Asp.Net Core 3.1 için çalışan tam teşekküllü bir cevap sağlayacağım. Bütünlük aşkına:

[Route("health")]
[ApiController]
public class HealthController : Controller
{
    [HttpGet("some_health_url")]
    public ActionResult SomeHealthMethod() {}
}

[Route("v2")]
[ApiController]
public class V2Controller : Controller
{
    [HttpGet("some_url")]
    public ActionResult SomeV2Method()
    {
        return RedirectToAction("SomeHealthMethod", "Health"); // omit "Controller"
    }
}

URL'ye özgü dizelerden herhangi birini kullanmaya çalışırsanız, örneğin "some_health_url"işe yaramaz!

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.