如何在返回新视图时保留URL

时间:2017-04-25 19:52:36

标签: c# asp.net-mvc iis

初学者问题 - 我有一个HomeController,HomeModel和HomeView。当用户进入http://page/Home页面时,会执行Index方法,并且可以填写一些控件。单击按钮(回发)后,将执行Process操作,如果出现错误,应用程序将调用ModelState.AddModelError方法。然后再次调用Index操作,我可以在页面上显示错误。

这样可行,但问题是在回发后新网址为http://page/Home/Index而不是http://page/Home。知道如何防止这种情况吗?

PS - 我尝试了this解决方案但是新的网址就像http://page/Home?...long string of serialized ModelState data...

我的控制器:

[HttpGet]
public ActionResult Index(MyModel model)
{
    return View(model);
}

[HttpPost]
public ActionResult Process(MyModel model)
{
    if (...error...)
    {
        model.SetErrorState();
        ModelState.AddModelError("ProcessError", "error message");
        return View("Index", model);
    }
    else
    {
        // do something...
        model.SetSuccessState();
        return View("Index", model);
    }
}

1 个答案:

答案 0 :(得分:2)

问题是您正在推送HttpPost操作的新网址。如果您将此更改为HttpPost操作的Home版本,则可以整齐地返回到该网页,而不会更改网址时出错。

e.g。

[HttpGet]
public ActionResult Index(ImportData model)
{
    return View(model);
}

[HttpPost]
public ActionResult Index(MyModel model, FormCollection data)
{
    if (...error...)
    {
        model.SetErrorState();
        ModelState.AddModelError("ProcessError", "error message");
        return View(model);
    }
    else
    {
        // do something...
        model.SetSuccessState();
        return View(model);
    }
}