2014-10-14 2 views
8

Это целевой контроллер и действие:Url.Action карты неправильно ссылки от маршрута атрибута

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

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

метод Карты вызов:

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

результата: /Editor ID = 1

Требуемый результат: /Редактор/1

ответ

0

Вы проверили, если вы разрешили MVC AttributeRoutes?

routes.MapMvcAttributeRoutes(); 

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

+0

Да, вот список RouteConfig.cs государственной статической силы RegisterRoutes (RouteCollection маршруты) { routes.IgnoreRoute ("{ресурс} .axd/{* Pathinfo}"); routes.MapMvcAttributeRoutes(); routes.MapRoute ( name: "Default", URL: "{controller}/{action}/{id}", defaults: new {controller = "Home", action = "Index", id = UrlParameter. Дополнительно} ); } – Aminion

+0

И да, я руководствовался этой конкретной статьей при написании кода. – Aminion

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" }) 

Надеется, что это помогает,

+0

Означает ли это, что я должен назвать все свои действия? –

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 
    } 
} 

Теперь обе ссылки и редактирования работ.

Смежные вопросы