在MVC控制器中传递默认“id”参数的非数字值

时间:2015-12-22 12:32:35

标签: c# asp.net-mvc asp.net-mvc-4

我有一个相当简单的设置,我正在创建一个MVC网站来显示客户的详细信息。对于客户,唯一ID是他们的电子邮件地址,这是非数字的。所以在我的ROuteConfig.cs中我有默认路由

 routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

在我的名为“CustomerController”的控制器中,我有这个动作

public ActionResult Details(string id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            CustomerModel customerModel = _customerManager.GetCustomer(id);
            if (customerModel == null)
            {
                return HttpNotFound();
            }
            return View(customerModel);
        }

现在我导航到这个网址

http://localhost:45826/customer/Details/someemail%40web.com

路由基础设施不会在我的控制器上调用操作“详细信息”,但是如果我导航到此网址

http://localhost:45826/customer/Details/5

然后该动作调用传入id参数的值5。

如果我稍微更改了URL并使用此语法

http://localhost:45826/customer/Details?id=fromweb%40web.com

再次正确调用该操作,将电子邮件地址传递给id参数。

有人可以帮助理解为什么非数字值没有按预期映射到操作吗?

我也尝试在默认路由之前添加此路由,但这也不起作用,我得到相同的结果

routes.MapRoute(
            name: "ViewCustomer",
            url: "customer/details/id",
            defaults: new { controller = "Customer", action = "Details", id = "" }
            );

1 个答案:

答案 0 :(得分:0)

在web.config中添加它:

If ComboBox1.Value = "?" Then

阅读: https://stackoverflow.com/a/49831093/10299573