2010-09-29 4 views
2

У меня есть следующий контроллер, в районе под названием "Сервис":Помощь с ASP.NET MVC маршрутизации и областей

namespace Web.Areas.Service.Controllers 
{ 
    public class IntervalController : Controller 
    { 
     // 
     // GET: /Service/Interval/ 

     public JsonResult Monitor(String accountId, int datekey) 
     { 
      //... 
     } 
    } 

} 

URL-адрес

http://localhost/Web/Service/Interval/Monitor?accountid=123&datekey=123 

возвращается ошибка ASP.net:

"The parameters dictionary contains a null entry for parameter 'accountId' of non-nullable type 'System.Guid' for method 'System.Web.Mvc.JsonResult Monitor(System.Guid, Int32)'" 

Как настроить маршрутизацию для правильной передачи параметров на контроллер?

+1

У вас есть аккаунт в параметре url, и контроллер ожидает учетную запись. Но не уверен, что это проблема. – Rob

+2

Можете ли вы опубликовать свои маршруты и любые другие методы мониторинга, которые вы перегрузили в своем контроллере. Похоже, что URL-адрес, который вы запрашиваете, вызывает неправильное действие (поскольку ваши параметры метода принимают строку, int и вызываемое действие принимает guid, int). –

ответ

1

Говорят, что у вас есть руководство, возможно, у вас есть другое переопределение или у вас есть атрибут имени действия, указанный для одного из методов, определяемых как «Монитор»?

1

Может быть, вам нужно добавить в Global.asax: (следующие строки в VB, но это почти то же самое)

routes.MapRoute(_ 
     "Monitor", _ 
     "{controller}/{action}/{accountId}/{datekey}", _ 
     New With {.controller = "Home", .action = "Index", .accountId = UrlParameter.Optional, .datekey = UrlParameter.Optional}) 

Посмотрите параметры являются необязательными, так что вы можете передать строку, длинные или любые данные тип. Я предпочитаю не писать MapRoute для каждого действия, поэтому постарайтесь стандарт это

routes.MapRoute(_ 
     "WhatEver", _ 
     "{controller}/{action}/{parameter1}/{parameter2}", _ 
     New With {.controller = "Home", .action = "Index", .parameter1 = UrlParameter.Optional, .parameter2 = UrlParameter.Optional}) 

Таким образом, вы можете использовать его на другое действие, независимо от типа данных, но это имеет значение числа параметров.

0

Похоже, что у вас есть другая перегрузка действий, которая сопоставляется вместо той, что задана в вашем вопросе, поскольку ваш текущий URL-адрес выдает ошибку, пытаясь сопоставить System.Web.Mvc.JsonResult Monitor(System.Guid, Int32), что, очевидно, не является желаемым действием.

public JsonResult Monitor(Guid accountid, int datekey) 
{ 
    //... 
} 

Без фактического просмотра ваших маршрутов немного сложно точно сказать, что происходит не так. Однако одна вещь, которую вы должны изменить в своем URL-адресе, состоит в том, чтобы сделать accountidaccountId в соответствии с случаем параметра в действии Monitor. Это сделает ваш новый URL-адрес следующим:

http://localhost/Web/Service/Interval/Monitor?accountId=123&datekey=123 
Смежные вопросы