«Детали» в маршрутизации asp.net MVC, кажется, не удаляются - PullRequest
0 голосов
/ 06 мая 2010

Я пытаюсь удалить Details из http://localhost:1985/Materials/Details/2/Steel, но кое-что, как мой маршрут, кажется, не работает ...

Редактировать:

 routes.MapRoute(
             "Materials", // <-- Above default
             "Materials/{id}/{name}",
             new { controller = "Materials", action = "Details", id = "", name = "" }
         );

        routes.MapRoute(
            "Default", // <-- Last route, kind of a "catch all"
            "{controller}/{action}/{id}/{name}",
            new { controller = "Materials", action = "Index", id = "", name = "" }
        );

поместив ответ ниже в мою коллекцию маршрутов, моей странице индекса не удалось вызвать метод контроллера jsonresult ....

  public class MaterialsController : Controller
  {
   public ActionResult Index()
    {
        return View("Materials");
    }

    public JsonResult GetMaterials(int currentPage,int pageSize)
    {
        var materials = consRepository.FindAllMaterials().AsQueryable();
        var count = materials.Count();
        var results = new PagedList<MaterialsObj>(materials, currentPage-1, pageSize);
        var genericResult = new { Count = count, Results = results };
        return Json(genericResult);
    }
   }

и моя страница индекса имеет функцию jquery, которая использует результат json ....

<script type="text/javascript">
$(document).ready(function() {
  $.ajax({
   url: "Materials/GetMaterials",
    data: {'currentPage': (currentPage + 1) ,'pageSize':5},
    contentType: "application/json; charset=utf-8",

Эта функция jquery не вызывает метод контроллера jsonresult ...... Но если я сначала укажу Default route, он будет работать ...

При проверкечерез firebug это показывает,

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Details(Int32)' in 'CrMVC.Controllers.MaterialsController'. To make a parameter optional its type should be either a reference type or a Nullable type.<br>Parameter name: parameters

Ответы [ 2 ]

1 голос
/ 06 мая 2010

Попробуйте использовать помощник routelink для генерации правильного URL-адреса для этого запроса, чтобы вы могли убедиться, что он полностью правильный, а затем используйте этот URL-адрес в своем JavaScript. Возможно, ваш URL не совсем верный, что является причиной проблемы.

Вы можете использовать помощник routelink, чтобы поместить URL-адрес в ссылку, просто чтобы получить его и посмотреть, как он должен выглядеть, а затем сравнить его с реальным URL-адресом в запросе AJAX.

1 голос
/ 06 мая 2010

Ваши маршруты в обратном направлении. Они соответствуют в том порядке, в котором они добавляются в коллекцию, поэтому маршрут По умолчанию сначала сопоставляется.


EDIT

routes.MapRoute(
    "Materials",
    "Materials/{id}/{name}",
    new { controller = "Materials", action = "Details", id = "", name = "" },
    new {id= @"\d+" } // Prevent routes in the form of {controller}/{action}/{id} from matching.
);

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}/{name}",                          
    new { controller = "Materials", action = "Index", id = "" ,name=""} 
);
...