Как прописать минимальные маршруты для подобных действий? - PullRequest
1 голос
/ 02 июля 2011

У меня есть несколько действий:

public partial class MyController : Controller
{    
     public ActionResult Action1()
     {              
     }
     public ActionResult Action2(int id)
     {              
     }

     public ActionResult Action3(string id)
     {              
     }

     public ActionResult Action4(string name)
     {              
     }
}

Нужно ли регистрировать маршруты для каждого действия, как это:

 routes.MapRoute("r1", "{controller}/{action}/{id}", new { id = UrlParameter.Optional });   
 routes.MapRoute("r2", "{controller}/{action}/{name}", new { name = UrlParameter.Optional }); 

Или есть какой-то способ зарегистрировать один маршрут шаблона для всех действийили может мне нужен какой-то "хак"?

Ответы [ 2 ]

1 голос
/ 03 июля 2011

Подобные URL должны использовать похожие маршруты.Таким образом, в этом случае у вас есть только один шаблон URL, который /controller/action/someid.Поэтому просто используйте маршрут по умолчанию:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

, а затем обновите свои действия:

public partial class MyController : Controller
{    
     public ActionResult Action1()
     {              
     }
     public ActionResult Action2(int id)
     {              
     }

     public ActionResult Action3(string id)
     {              
     }

     public ActionResult Action4(string name)
     {              
     }
}

Что касается последнего действия, параметр name можно передать в виде строки запроса,Если вы действительно настаиваете на том, чтобы он был частью пути, вы можете переименовать его в id.Лучше передавать произвольные строки, такие как имена, как параметры строки запроса, а не как часть пути URL.

0 голосов
/ 02 июля 2011

Вам не нужно регистрировать эти дополнительные параметры URL ... Если вы создаете форму с 3 элементами управления вводом и присваиваете им имена, то вы делаете действие с теми же именами, что и элементы управления вводом. Они будут волшебно заполнены.

Если вы используете строго типизированные представления, вы можете даже передать модели как ввод:

public class customer
{
    public int Id { get;set;}
    public string Name {get;set}
    public string LastName {get;set;}
}

В вашем контроллере:

public ActionResult UpdateCustomer(Customer customer)
{
    // Add update logic
}
...