2015-06-14 2 views
0

Это мой код:ASP.NET MVC - писать меньше кода для шаблона маршрута

routes.MapRouteLowercase(
       name: "productadd", 
       url: "product/add", 
       defaults: new 
       { 
        controller = "Product", 
        action = "Add" 
       } 
        , namespaces: new[] { "project.Controllers" }); 
      routes.MapRouteLowercase(
       name: "productlike", 
       url: "product/like", 
       defaults: new 
       { 
        controller = "Product", 
        action = "Like" 
       } 
        , namespaces: new[] { "project.Controllers" }); 
      routes.MapRouteLowercase(
       name: "productshow", 
       url: "product/{id}/{seoName}", 
       defaults: new 
       { 
        controller = "Product", 
        action = "Get", 
        id = UrlParameter.Optional, 
        seoName = UrlParameter.Optional 
       } 
        , namespaces: new[] { "project.Controllers" }); 

Я хочу решение для записи меньше кодов, на самом деле шаблон для productshow и другой шаблон для действий продукта

ответ

2

Вы можете использовать Attribute Based Routing в MVC. Это доступно по умолчанию в MVC5 или может быть установлено как пакет NuGet в MVC4.

С помощью маршрутизации, основанной на атрибутах, вы можете определить атрибуты в своих методах действий, а не соответствовать магии строки в таблице маршрутизации. Вы также можете выполнить более расширенную проверку типов, например минимальное и максимальное значения, и, при желании, назвать маршруты для удобной ссылки в своей Razor.

как пример:

[RoutePrefix("product")] 
public class ProductController : Controller { 

//route /product 
[Route] 
public ActionResult Index() { ... } 

//route /product/add 
[Route("add")] 
public ActionResult Add() { ... } 

//route /product/like 
// <a href="@Url.RouteUrl("productLike")">Like</a> 
[Route("like", Name="productlike")] 
public ActionResult Like() { ... } 

//route /product/{id}/{seoName} 
[Route("{id?}/{seoName?}")] 
public ActionResult Get(int? id, string seoName) { ... } 

} 
+0

Tanx для решения и хороший пример! :) –

1

Саман, вы можете создать маршрут по умолчанию, как показано ниже. Я не уверен, что это сработает с «MapRouteLowercase», вы можете попробовать.

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

У этого link есть больше вариантов, если вы хотите.

+0

Тьяго мой друг Tanx, но это работает только для действий не "/ продукт/{ID}/{seoName}" –

Смежные вопросы