Jak korzystać z obszaru w ASP.NET Rdzeń

Jak używać Area w ASP.NET Rdzeń? Nie jest to właściwie udokumentowane!

Przypuśćmy, że mam aplikację, która potrzebuje sekcji administratora. Ta sekcja wymaga, aby jej widoki były miejscami w tym obszarze. Wszystkie żądania zaczynające się od Admin/ będą musiały zostać przekierowane do tego obszaru.

Author: Vahid Amiri, 2016-04-11

2 answers

W celu uwzględnienia obszaru w ASP.NET Core app, najpierw musimy umieścić trasę konwencjonalną w pliku Startup.cs (najlepiej umieścić ją przed dowolną trasą spoza obszaru):

W Startupie.metoda cs / Configure:

app.UseMvc(routes =>
{
    routes.MapRoute("areaRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}");

    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

Następnie utwórz folder o nazwie Areas w głównym katalogu aplikacji i utwórz inny o nazwie Admin wewnątrz pierwszego, również Utwórz te foldery w Admin (viewcomponent jest opcjonalny):

Tutaj wpisz opis obrazka

Teraz tworzymy kontroler wewnątrz folderu Controllers nazwa AdminController, zawartość może być taka:

[Area("Admin")]
[Route("admin")]
public class AdminController : Controller
{
    public AdminController()
    {
        // do stuff
    }

    public IActionResult Index()
    {
        return View();
    }

    [Route("[action]/{page:int?}")]
    public IActionResult Orders()
    {
        return View();
    }

    [Route("[action]")]
    public IActionResult Shop()
    {
        return View();
    }

    [Route("[action]/newest")]
    public IActionResult Payments()
    {
        return View();
    }
}

Teraz, aby to zadziałało, musisz utworzyć widoki dla wszystkich działań, które zwracają jeden. Hierarchia widoków jest taka sama jak w folderze widoków spoza obszaru:

Tutaj wpisz opis obrazka

/ Align = "left" /

Pytanie: Co zrobić, jeśli mam inny kontroler w moim obszarze?

Odpowiedź:

Wystarczy dodać inny kontroler obok AdminController i upewnić się trasy są następujące:

[Area("Admin")]
[Route("admin/[controller]")]
public class ProductsController : Controller
{
    public ProductsController()
    {
        //
    }

    [Route("{page:int?}")]
    public IActionResult Index()
    {
        return View();
    }
}

Ważną częścią jest [Route("admin/[controller]")]. Dzięki temu możesz zachować styl routingu do admin/controller/action/...

 53
Author: Vahid Amiri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-21 13:33:20

Rusztowanie wygenerowało wszystkie pliki i dodało wymagane zależności.

Jednak kod startowy aplikacji może wymagać dodatkowych zmian, aby wszystko działało od końca do końca. Dodaj następujący kod do metody Configure w klasie startowej aplikacji, Jeśli jeszcze nie został wykonany:

    app.UseMvc(routes =>
    {
      route.MapRoute(
        name : "areas",
        template : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
      );
    });
 0
Author: Elnaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 12:28:35