这是目标控制器和行动:
[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
答案 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
}
}
现在链接和编辑都有效。