2013-08-20 2 views
0

У меня есть этотКак реализовать другое имя параметра склонение для маршрута

public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 

и когда я пытаюсь использовать параметр как

[AcceptVerbs("POST")] 
public JsonResult ShowProductsPerPage(string pageNumber) 
{ ... 

Это не работает

, но когда я использование

[AcceptVerbs("POST")] 
public JsonResult ShowProductsPerPage(string id) 
{ ... 

Это работа хорошо.

Здесь JS

var currentUrl = window.location.protocol + '//' + window.location.host; 
    var url = currentUrl + "/Products/ShowProductsPerPage/" + pageNumber; 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: "", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      alert(data.pageNumber); 
     } 
    }); 

я использую в JavaScript переменная pageNumber, так что я хотел бы сохранить такое же имя для кода за методами.

Возможно ли это как-то?

+0

Просто изменение {ID} в пути к {PageNumber }. – Dennisch

+1

Покажите нам, как вы отправляете данные контроллеру – karaxuna

+0

@ Dennisch Но как насчет других методов, когда я использую 'id'? Они не сработают. –

ответ

2

У вас есть три варианта:

  • Первый (как комментарии сказали), чтобы изменить {id} к {pageNumber} в существующий маршрут.

  • Второе - создать новый маршрут, который каким-то образом отличается и принимает {pageNumber}. Поместите этот маршрут до вашего существующего:

.

routes.MapRoute(
    name: "PageNumber", 
    url: "Products/ShowProductsPerPage/{pageNumber}", 
    defaults: new { controller = "Products", action = "ShowProductsPerPage" } 
); 
  • Третий способ явно передать pageNumber в качестве параметра: /Products/ShowProductsPerPage?pageNumber=5
+0

Спасибо! Я просто проверил №2, и это то, что мне нужно. –

+0

Все они будут работать, и лучшая ситуация зависит от ситуации. Я рад, что вы нашли тот, который работал на вас. – Bobson

1

Просто измените {id} на маршрут до {pageNumber} (а также соответствующий urlparameter). Нет правил о том, какие параметры должны иметь имена, id - это просто его использование.

0

Изменить ваш вызов:

var url = currentUrl + "/Products/ShowProductsPerPage?pageNumber=" + pageNumber;