.net core mvc маршрутизиране и контролери

Така че аз съм чисто нов в .net. В момента уча .net core. Опитвам се да разбера маршрутизирането. Изглежда не мога да накарам маршрутизирането да търси в никоя папка освен Home и Shared. Разгледах целия интернет и опитах много неща. Изглежда има нещо, което пропускам. Ето какво получих

 app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "test", 
                    template: "Register/test",
                    defaults: new { controller = "Register", action = "test"}
                    );

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


            });

Имам папка Register с файл test.cshtml само за да се опитам да разбера това маршрутизиране. И това е в моя файл HomeController.cs

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

на моята страница _Layout имам тази връзка

  <li><a asp-area="" asp-controller="Register" asp-action="test">Test</a></li>

Работи добре, когато го поставя в домашната папка, но искам да държа нещата отделно. Знам, че има нещо, което ми липсва. Прегледах всякакви статии онлайн, включително Stack Overflow, и просто не разбирам какво пропускам. От това, което прочетох, се предполага, че е като родителска папка/файл/ и идентификатор, който може да бъде прикачен към това като потребителско име. Опитах други формати за маршрутизиране без успех, това беше само последният ми опит. Просто не мога да не мисля, че имам нужда от малко код на друго място.


person FoffySkrimshaw    schedule 20.10.2016    source източник
comment
Съжалявам! Какъв е истинският проблем, с който се сблъсквате? Какво е вашето очаквано поведение?   -  person Shyju    schedule 20.10.2016
comment
Добавяне на маршрути към лента за навигация точно сега, защото това изглежда най-лесният пример за маршрутизиране, но предполагам, че не е за мен. По принцип връзката трябва да води към тестовата страница в папката Register.   -  person FoffySkrimshaw    schedule 20.10.2016
comment
Е, накарах го да работи. Не съм сигурен какво направих различно от това, което съм опитвал преди. Което всъщност не ми помага да го разбера по-добре. Но сега, след като го накарах да работи, може би мога да го направя по-добра дисекция, за да го видя.   -  person FoffySkrimshaw    schedule 20.10.2016


Отговори (1)


От въпроса ви изглежда, че имате следния код във вашия HomeController.

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

Това всъщност принадлежи към вашия RegisterController, тъй като шаблонът за маршрут, който сте дефинирали, е изрично улавяне със стандартни настройки за контролера „Регистриране“ и действието „тест“.

Изгледът, наречен "test.cshtml" - който трябва да бъде наречен така поради конвенцията по подразбиране - трябва да се намира във вашата папка \Views\Register, в съседство с \Views\Home.

Има няколко причини, поради които това може да е проработило по някакъв начин. Първо, изгледът е откриваем за всеки контролер, ако е споделен. Без да знаете повече за заявките, които сте изпробвали, е трудно да определите дали маршрутизирането е започнало на първия или втория маршрут, но ако този метод наистина беше на HomeController заявки към /home/test щеше да работи.

Изглежда ми, че проучвате маршрутизирането. Това е страхотно - аз 100% насърчавам експериментирането - стига да знаете, че маршрутизирането не е непременно най-долният плод за учене. Това също е нещо, което не трябва да докосвате 93,7% от времето. Например маршрутът, за който сте дефинирали, не би бил необходим за контролера и действието, което добавяте с RegisterController и test.

наздраве

person MisterJames    schedule 20.10.2016