我有一个问题,当我尝试在控制器中构建操作的网址时,分配后vm
的值为" /"。如果我尝试使用其他操作名称创建网址,那么一切正常,例如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();
}
}
该代码有什么问题?
答案 0 :(得分:5)
这是因为您的路线将它们指定为默认值。
您的路线是:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Contact", action = "Create", id = String.Empty }, null);
基本上,这是因为您指定了默认值controller = "Contact", action = "Create"
。如果您将这些指定为默认值,则表示如果URL中未提供该值,请使用这些值。
例如,所有这些网址都相同:/
,/Contact
& /Contact/Create
。默认情况下,MVC会为您生成最短的URL。
您可以更改默认值或将其删除,如下所示:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { id = String.Empty }, null);