Aminion
Aminion

Reputation: 465

Url.Action map a wrong link from Route attribute

This is target controller and action:

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

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

Map method calling:

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

result: /Editor?id=1

required result: /Editor/1

Upvotes: 8

Views: 2611

Answers (3)

Doctor Coder
Doctor Coder

Reputation: 1061

I just faced with same problem. When i fixed the links - editing is broken (form always redirects to the same page).

Here is solution:

A link

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

A form in the view Edit.cshtml (specifying Controller name is necessary!)

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

The actions in the controller

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

Now both links and editing works.

Upvotes: 0

gsimoes
gsimoes

Reputation: 1021

To achieve the result you want you have to use a route name:

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

Then in your view you would use Url.RouteUrl instead of Url.Action:

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

Hope this helps,

Upvotes: 8

Jesper Rogild
Jesper Rogild

Reputation: 1

Have you checked if you have enabled MVC AttributeRoutes?

routes.MapMvcAttributeRoutes();

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

Upvotes: 0

Related Questions