2014-12-10 4 views
0

У меня есть приложение, которое является всего лишь одним контроллером и одним действием, но я хочу передать два значения в это действие. Конечный результат, который я ищу является URL, который выглядит как этот http://www.example.com/parameter1/parameter2Передача нескольких параметров в действие по умолчанию

Так я думал, что маршрутизация будет выглядеть следующим образом

routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}/{name}", 
     defaults: new { controller = "Home", action = "Index"} 
    ); 

и контроллер будет выглядеть следующим образом

public class HomeController : Controller 
{ 
    public ActionResult Index(string id, string name) 
    { 
     return View(); 
    } 
} 

Но я явно не прав, поскольку он не работает. Кто-нибудь знает, возможно ли это под действием индекса?

Чтобы уточнить, я хочу 2 параметра в действии по умолчанию. Я знаю, что это возможно, имея что-то вроде http://www.example.com/books/parameter1/parameter2/, но я определенно хочу http://www.example.com/parameter1/parameter2/

+0

Возможный дубликат http://stackoverflow.com/questions/2246481/routing-with-multiple-parameters-using-asp-net-mvc – joetinger

ответ

2

Чтобы полностью опустить controller и action заполнителей в маршруте вы можете просто удалить их. (Не удаляйте его из маршрута по умолчанию, лучше создать новый и разместить его о дефолте одного)

routes.MapRoute(
     name: "Default", 
     url: "{id}/{name}", 
     defaults: new { controller = "Home", action = "Index"} 
    ); 

Этот маршрут будет работать только с Index действия от HomeController, но не с другими.

+0

Это потрясающе. Большое вам спасибо за вашу помощь. Теперь это кажется таким очевидным. – Roffers

1

Если id не является обязательным, что ваш URL будет выглядеть, когда он не вошел, но зовут?

/Home/Index//name 

Это, очевидно, недействительно.

Рассмотрите возможность использования значений в строке запроса вместо части URL.

+0

Благодарим за отзыв. Я изменил вопрос. Параметры не должны быть дополнительными. – Roffers

0

Я использовал this и this, чтобы решить эту проблему. нужны два маршрута и убедитесь, что эти маршруты приходят выше маршрут MVC по умолчанию:

routes.MapRoute(
     name: "with-name", 
     url: "Home/{action}/{id}/{name}", 
      defaults: new { controller = "Home", action = "Index"} 
     //No Optional 
     ); 

routes.MapRoute(
      name: "without-name", 
      url: "Home/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index"} 
     ); 
Смежные вопросы