I have a basic Edit method in my controller that redirects back to a top level listing (“Index”) when the edit succeeds. Standard behavior after MVC scaffolding.

I am trying to change this Edit method to redirect back to the previous page (not Index). Since my Edit method wasn't using the default mapped input parameter “id”, I first tried using that to pass in the previous URL.

In my Edit “get” method, I used this line to grab the previous URL and it worked fine:

ViewBag.ReturnUrl = Request.UrlReferrer;

I then sent this return URL to the Edit “post” method by using my form tag like this:

@using (Html.BeginForm(new { id = ViewBag.ReturnUrl }))

Now this is where the wheels fell off. I couldn't get the URL parsed from the id parameter properly.

*** UPDATE: SOLVED ***

Using Garry's example as a guide, I changed my parameter from "id" to "returnUrl" and used a hidden field to pass my parameter (instead of the form tag). Lesson learned: Only use the "id" parameter how it was intended to be used and keep it simple. It works now. Here is my updated code with notes:

First, I grab the previous URL using Request.UrlReferrer as I did the first time.

    //
    // GET: /Question/Edit/5

    public ActionResult Edit(int id)
    {
        Question question = db.Questions.Find(id);
        ViewBag.DomainId = new SelectList(db.Domains, "DomainId", "Name", question.DomainId);
        ViewBag.Answers = db.Questions
                            .AsEnumerable()
                            .Select(d => new SelectListItem
                            {
                                Text = d.Text,
                                Value = d.QuestionId.ToString(),
                                Selected = question.QuestionId == d.QuestionId
                            });
        // Grab the previ
Edit
Report