Url.Action从Route属性映射错误的链接

时间:2014-10-14 16:14:59

标签: asp.net-mvc

这是目标控制器和行动:

[RoutePrefix("Editor")]
public class EditorController : Controller

[HttpGet]
    [Route("{id:int}")]
    public ActionResult Edit(int id)

地图方法调用:

@Url.Action("Edit", "Editor", new { id = page.Id})

结果: /编辑?ID = 1

要求的结果: 器/编辑器/ 1

3 个答案:

答案 0 :(得分:7)

要获得结果,您需要使用路线名称:

[HttpGet]
[Route("{id:int}", Name = "EditorById")]
public ActionResult Edit(int id)

然后在您的视图中,您将使用Url.RouteUrl而不是Url.Action:

@Url.RouteUrl("EditorById", new { controller = "Editor", Id = 1, action = "Edit" })

希望这有帮助,

答案 1 :(得分:0)

您是否检查过是否启用了MVC AttributeRoutes?

routes.MapMvcAttributeRoutes();

请参阅http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx

答案 2 :(得分:0)

我刚遇到同样的问题。当我修复链接时 - 编辑被破坏(表单总是重定向到同一页面)。

这是解决方案:

链接

@Html.ActionLink("Edit my nice object", "Edit", new { id=item.Id })

视图Edit.cshtml 中的表单(指定控制器名称是必要的!)

@using (Html.BeginForm("EditConfirmed", "AppServers"))

控制器中的操作

public class AppServersController         
    [Route("edit/{id:int?}")]
    public ActionResult Edit(int? id)
    {
        // bla-bla
    }
    [Route("edit_confirmed")]
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult EditConfirmed([Bind(Exclude = "Created,LastModified")] AppServerVM appServer)
    {
        if (!ModelState.IsValid) return View("Edit", appServer);
        // bla-bla
    }
}

现在链接和编辑都有效。