我有一个问题,当我试图在控制器中构建ACTION的URL时,分配后的vm
值为"/"。如果我尝试使用其他动作名称创建URL,那么一切正常,例如Url.Action("Edit", "Contact")
。
public class ContactController : Controller
{
public ActionResult List()
{
string vm = Url.Action("Create", "Contact"); // equals "/"
string editUrl = Url.Action("Edit", "Contact"); // all is fine
return View("List", vm);
}
public ActionResult Create()
{
return HttpNotFound();
}
public ActionResult Edit()
{
return HttpNotFound();
}
}
该代码怎么了?
这是因为您的路线将它们指定为默认值。
您的路线是:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Contact", action = "Create", id = String.Empty }, null);
本质上,这是因为您指定默认值controller = "Contact", action = "Create"
。当您将其指定为默认时,您会说如果URL中未提供该值,则使用这些值。
示例所有这些URL都是相同的: /
, /Contact
&/Contact/Create
。默认情况下,MVC为您生成最短的URL。
您可以更改默认值或这样删除它们:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { id = String.Empty }, null);