Вы не можете определить несколько действий в одном маршруте MVC. В конфигурации маршрутизации MVC используются для отображения ваших Controlers и действий для пользователей дружественных маршрутов и:
- Keep адрес чистых
- Держите URL, обнаруживаемого конечных пользователями
- идентификаторов баз данных Избегайте в URL
Понимание маршрута по умолчанию конфигурации:
routes.MapRoute(
name: "Default", // Route name
routeTemplate: "{controller}/{action}/{id}", // URL with parameters
defaults: new { controller = "Home", action = "mysample", id=UrlParameter.Optional }
);
Свойство «routeTemplate» на классе маршрута определяет правило соответствия Url , который должен использоваться для оценки, если правило маршрута относится к конкретному входящему запросу.
Свойство «defaults» в классе Route определяет словарь значений по умолчанию для использования в случае, если входящий URL-адрес не содержит , включая одно из указанных значений параметров.
По умолчанию маршрута будет отображать все запросы, так как она определила значения по умолчанию для каждого свойства в routeTemplate, {} означает, что свойство является переменным, если не обеспечить значение для этого паров в URL, он будет пытаться принять значение по умолчанию если вы его предоставите. В маршруте по умолчанию он определил значения по умолчанию для контроллера, действие и параметр id являются необязательными. Это означает, что если у вас есть маршрут, как это:
.../Account/Вход
Это приведет вас к счету контроллера, Войти действия и потому, что вы не указали пропеллер и он определяется как необязательный, он будет работать.
.../Главная
Это также будет работать, и это приведет вас к Главной и -регулятору MYSAMPLE действия
При определении пользовательского маршрута, как вы делали :
routes.MapRoute(
"myname", // Route name
"{controller}/{action}/{details}/{myname}", // URL with parameters
new { controller = "mycontroller", action = "myaction", details= "details", myname= "" } // Parameter defaults
);
Вы не указали мое имя как необязательное, и вы не указал его на ваш маршрут, это означает, что ваш URL: localhost/mycontroller/myaction/details wan't будет обрабатываться вашим пользовательским маршрутом myname. Он будет обрабатываться по умолчанию. И когда вы пытаетесь получить доступ к своему параметру myname в контроллере, он не будет там, и вы получите нулевую ошибку ссылки. Если вы хотите указать значение по умолчанию вашего параметра, если оно отсутствует в URL-адресе, вам нужно сделать это в своем контроллере. Например:
public class MyController : Controller
{
public ActionResult MyAction(string details = "details", string myname = "")
{
...
и изменить свой собственный путь к:
routes.MapRoute(
"myname", // Route name
"{controller}/{action}/{details}/{myname}", // URL with parameters
new { controller = "mycontroller", action = "myaction", details= UrlParameter.Optional, myname= UrlParameter.Optional } // Parameter defaults
);
Но вы можете определить только один контроллер и только одно действие, остальные routeTemplate являются параметрами.
Вы не можете определить два действия в одном маршруте. Это не имеет смысла.
Вы хотите несколько параметров в вашем маршруте или цепочку действий? – freshbm
@freshbm action chaining – GowthamanSS
Вы не можете этого сделать. У вас может быть несколько параметров для одного маршрута, но вы не можете иметь несколько действий, прикованных по маршрутам MVC. Это пример цепочки действий, но это не тривиально. http://jwbs-blog.blogspot.com/2009/08/chaining-aspnet-mvc-actions.html Что вы хотите сделать? – freshbm