简体   繁体   中英

Combine controller and action parameter for ActionLink / RedirectToAction

My application has a view that is linked from various different other views located in different controllers. I would like to have a 'Back' button in this view that will send the user back to the previous view, which ever that may be.

To this end I have added a string attribute to the viewmodel which I would like to use to reference the originating view /MyController/MyAction in the @Html.ActionLink parameters.

Some of the views linking to this view belongs to current controller, some belong to other controllers. This means I have to pass the controller as well as the action to the ActionLink.

As it stands, my code looks something like this:

ViewModel:

public class MyViewModel
{
    public int MyData { get; set; }

    [HiddenInput]
    public string ReturnUrl { get; set; }
}

View:

@Html.ActionLink("Back", Model.ReturnUrl)

This produces the undesirable result of localhost:####/CurrentController/MyController/MyAction

Of course I could always save two strings on the ViewModel (one for the controller and one for the action) and pass them to the ActionLink seperately, but if possible I would like to avoid that. Is there an overload of ActionLink that allows me to use a single return url string, without making implications about the controller?

Also, is it possible to achieve the same thing on the controller side, f.ex. like this:

[HttpPost]
public ActionResult DoStuff(MyViewModel model)
{
    // do stuff

    return RedirectToAction(model.ReturnUrl);
}

You shouldn't use ActionLink . Just use an anchor tag, like this:

<a href='@Url.Content(Model.ReturnUrl)'>Back</a>

And, in your Action, you can do it like below:

[HttpPost]
public ActionResult DoStuff(MyViewModel model)
{
    // do stuff

    return Redirect(model.ReturnUrl);
}

Also, another solution would be to have two properties ( ReturnController and ReturnAction ) in your model.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM