замените
routes.MapRoute(
"SignUp", // Route name
"account/{controller}/{action}", // URL with parameters
new { controller = "Home", action = "Register" } // Parameter defaults
);
на
routes.MapRoute(
"SignUp", // Route name
"account/{action}", // URL with parameters
new { controller = "Home" } // Parameter defaults
);
Это будет означать, что /account/register
будет направлено к действию Register на контроллере Home.Это также будет означать, что ссылки действий и другие ссылки, которые вы генерируете через @Html.ActionLink("Register", "Register", "Home")
, будут генерировать URL /account/register
. Думайте о «URL с параметрами» как о шаблоне, с которым будет сопоставляться URL.
Проблема с вашей исходной картой маршрутов в том, что она ищет URL-адрес, подобный этому /account/controllername/actionname
.Итак, когда вы идете /account/register
- он принимает register
в качестве имени контроллера и принимает имя действия по умолчанию (в данном случае регистр) - и в качестве действия «регистр» не существует в контроллере «регистр» -вы получаете 404.
ОБНОВЛЕНО Я обновил предложенный маршрут согласно комментариям Роберта.
Стоит также отметить, как утверждает Роберт, что все это моглосделать его более простым, сделав контроллер «Account» и перенеся туда действие «Register».Затем вы можете удалить маршрут SignUp и просто использовать маршрутизацию по умолчанию.Если вы подумали об этом, вы бы согласились, что это было бы лучшим местом для действия «Регистрация», чем контроллер «Домой».