2个可选的整数参数

本文关键字:整数 参数 2个 | 更新日期: 2023-09-27 17:53:26

我的用户控制器动作如下:

[HttpGet]
public ActionResult Choose(int? userId, int? locationId)
{
}

url看起来像:

/user/choose

/users/user/choose/{userId}/{locationId}

我试图将这个添加到我的区域路由:

context.MapRoute(
    "User_Choose",
    "Users/{controller}/{action}/{userId}/{locationId}",
        new { Controller = "Reward", action = "Choose", userId = UrlParameter.Optional }
);

现在如果我进入一个URL,比如:

/users/user/choose/123/456

我看到userId参数有一个值,但是locationId总是空的。

有什么问题吗?

2个可选的整数参数

修复方法如下:

context.MapRoute(
    "User_Choose",
    "Users/{controller}/{action}/{userId}/{locationId}",
        new { controller = "Reward", action = "Choose", userId = UrlParameter.Optional, locationId = UrlParameter.Optional}
);

你必须指定括号对于匿名对象的含义,即设置它们的默认值。

EDIT:实际上你的代码没有问题。我的控制器:

namespace WebApplication3.Areas.Users.Controllers
{
    public class UserController : Controller
    {
        // GET: Users/User
        public ActionResult Index()
        {
            return View();
        }
        [HttpGet]
        public ActionResult Choose(int? userId, int? locationId)
        {
            return View();
        }
    }
}

UsersAreaRegistration.cs:

namespace WebApplication3.Areas.Users
{
    public class UsersAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Users";
            }
        }
        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "User_Choose",
                "Users/{controller}/{action}/{userId}/{locationId}",
                    new { controller = "Reward", action = "Choose", userId = UrlParameter.Optional }
            );
        }
    }
}

Global.asax:

namespace WebApplication3
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

并且我总是使用您在Chose()方法中提供的url获得两个值。实际的问题可能出在您的名称空间上。