arame3333
arame3333

Reputation: 10193

MVC, cannot return to the previous URL

I am working on some legacy code. I have a form which I edit some data and when I click save, if successful I want to return to the previous form. So my controller methods are;

public ActionResult Edit(int callDiaryId)
        {
            ViewBag.PreviousUrl = System.Web.HttpContext.Current.Request.UrlReferrer;
            var callDiary = this.SCDCallDiaryRepository.Get(callDiaryId);
            return this.View("Edit", new DiaryItemViewModel(callDiary));
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        [ValidateOnlyIncomingValuesAttribute]
        public ActionResult Edit(DiaryItemViewModel item, string previousUrl)
        {
            var callDiary = this.SCDCallDiaryRepository.Get(item.SCD_CallDiaryId);
            callDiary.Comments = item.Comments;
            callDiary.ContractId = item.ContractId;
            var opStatus = this.SCDCallDiaryRepository.Update(callDiary);
            if (opStatus.Status)
            {
                this.TempData["SuccessMessage"] = "Details updated successfully.".MessageTime();
                return RedirectToAction(previousUrl);
            }

            this.TempData["ErrorMessage"] = "Details NOT updated.".MessageTime();
            ViewBag.PreviousUrl = previousUrl;
            return this.View(new DiaryItemViewModel(callDiary));
        }

and the incoming value of previousUrl is

http://localhost:58384/LogDiary/Comments?companyId=11033

This works perfectly for my back button. But after my RedirectToAction command is performed, the Bad Request error that I get is because the Url it is showing is;

http://localhost:58384/LogDiary/http%3a/localhost%3a58384/LogDiary/Comments%3fcompanyId%3d11033

How do I fix this?

Upvotes: 1

Views: 103

Answers (3)

anand
anand

Reputation: 1579

You can return to the previous form by doing the below code

        [HttpPost]
        [ValidateAntiForgeryToken]
        [ValidateOnlyIncomingValuesAttribute]
        public ActionResult Edit(DiaryItemViewModel item)
        {
            ..your other code..
            return View(item);
        }

it will return to the Edit page along with the entered data
hope this helps

Upvotes: 0

Jeff Finn
Jeff Finn

Reputation: 2055

I was able to do this in the Controller of my App to return the user to the previous page

public ActionResult ChangePassword()
{
    var userId = this.User.Identity.GetUserId();
    var viewModel = this._userService.ChangePasswordViewModelForUser(userId);

    viewModel.PreviousPage = this.Request.UrlReferrer.AbsoluteUri;

    return this.View(viewModel);
}

If I need to use it in a button

<a href="@HttpContext.Current.Request.UrlReferrer" class="btn btn-primary">@Resource.Button_Cancel</a>

Upvotes: 1

arame3333
arame3333

Reputation: 10193

I think I found the answer. Instead of using RedirectToAction, I am now using Redirect.

Upvotes: 0

Related Questions