我有一个非常基本的ASP.Net MVC项目,我想在我的一个控制器操作上使用id的参数名称。从我读过的所有内容都不应该是一个问题,但由于某些原因,使用id的参数名称无法获取从查询字符串中提取的值,但如果我将其更改为任何其他不同的名称,它将起作用。
我的global.asx只有一条路线
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
我的控制器方法是:
public ActionResult Confirm(string id)
{
....
}
http://mysite/customer/confirm/abcd的网址有效。网址http://mysite/customer/confirm?id=abcd失败。
如果我将控制器方法更改为:
public ActionResult Confirm(string customerID)
{
....
}
然后http://mysite/customer/confirm?customerID=abcd的网址有效。
在ASP.Net MVC查询字符串中使用“id”作为参数有什么特别之处吗?
更新:将id从1234更改为abcd,我的id实际上是字符串。
答案 0 :(得分:1)
如果您需要在查询字符串中包含id,则不要使用'id'参数创建路由。
如果您有路由"{controller}/{action}"
,那么您可以使用public ActionResult Confirm(string id)
作为控制器方法。
路由不关心查询字符串。
答案 1 :(得分:1)
如果你没有应用id参数(querystring或POST),系统会忽略它,你可以删除控制器中的“id”参数:
public ActionResult Confirm()
在您的情况下,您只需坚持使用id参数。当id被自动“映射”时,为什么要创建一个丑陋的customerID参数?
这是使用id参数的一个简单而简单的例子。
public ActionResult Confirm(int? id)
{
if (id.HasValue && id.Value > 0) // check the id is actually a valid int
_customerServer.GetById(id.Value);
// do something with the customer
return View();
}
这也适用于我。我们现在正在申请中使用标准路线:
public ActionResult Confirm(string id)
{
if (!string.IsNullOrEmpty(id)) // check the id is actually a valid string
_customerServer.GetByStringId(id);
// do something with the customer
return View();
}