2010-09-29 96 views
2

我有以下的控制器,名爲 「服務」 的區域內:幫助asp.net MVC路由和地區

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

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

} 

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參數和控制器預計accountId accountid。但不知道這是否是問題 – Rob 2010-09-29 12:31:08

+2

您可以發佈您的路由和任何其他監控方法,你已經超載在你的控制器。它看起來像你正在請求的URL調用錯誤的動作(因爲你的方法參數採取字符串,INT和被調用的動作採用GUID,INT)。 – 2010-09-29 12:33:37

回答

1

這是說你有一個GUID,你有可能有另一個覆蓋,或者你有一個操作名稱屬性指定爲監視器定義的方法之一?

1

也許你需要在Global.asax中添加:(下一行是在VB,但它幾乎是相同的)

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

看參數是可選的,所以你可以傳遞字符串,長,或任何數據類型。我寧願不寫爲每個操作圖路線,所以儘量以標準它

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操作中參數的情況。這將使你的新網址如下:

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