Controller Action中的UrlHelper无法构建正确的URL

时间:2018-02-16 12:53:20

标签: c# asp.net-mvc

我有一个问题,当我尝试在控制器中构建操作的网址时,分配后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();
    }
}

该代码有什么问题?

1 个答案:

答案 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);