帮助asp.net MVC路由和区域

时间:2010-09-29 12:28:45

标签: asp.net-mvc url-routing

我在名为“服务”的区域内有以下控制器:

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)'"

如何设置路由以将参数正确传递给控制器​​?

3 个答案:

答案 0 :(得分:1)

它说你有一个guid,你可能有另一个覆盖,或者你是否为一个定义为Monitor的方法指定了一个动作名称属性?

答案 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})

因此,无论数据类型如何,您都可以将其用于其他操作,但重要参数的数量。

答案 2 :(得分:0)

我看起来你有另一个匹配的动作重载而不是你问题中的那个,因为你当前的网址在尝试匹配System.Web.Mvc.JsonResult Monitor(System.Guid, Int32)时出错,这显然不是你想要的动作。 / p>

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

如果没有真正看到你的路线,就很难确切地知道出了什么问题。但是,您应该在URL中更改的一件事是使accountid成为accountId以匹配Monitor操作中参数的大小写。这将使您的新网址如下:

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