控制器动作中的URLHELPER不会构建正确的URL



我有一个问题,当我试图在控制器中构建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);

最新更新