C# 如何在返回新视图时保留url

C# 如何在返回新视图时保留url,c#,asp.net-mvc,iis,C#,Asp.net Mvc,Iis,一个初学者问题-我有一个HomeController、HomeModel和HomeView。当用户来到http://page/Homepage,然后执行Index方法,他可以填写一些控件。在他单击按钮(回发)后,执行流程操作,如果出现错误,应用程序将调用ModelState.addmodeleror方法。然后再次调用索引操作,我可以在页面上显示错误 这工作正常,但问题是回发后新的url是http://page/Home/Index而不是http://page/Home。你知道怎么预防吗 PS-我

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

这工作正常,但问题是回发后新的url是
http://page/Home/Index
而不是
http://page/Home
。你知道怎么预防吗

PS-我尝试了解决方案,但新的url类似于
http://page/Home?...long 序列化的ModelState数据字符串…

我的控制器:

[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);
    }
}

问题是您正在为
HttpPost
操作推送一个新的URL。如果您将其更改为
HttpPost
版本的
Home
操作,您可以整齐地返回页面,而不会错误地更改URL

e、 g


问题是您正在为
HttpPost
操作推送一个新的URL。如果您将其更改为
HttpPost
版本的
Home
操作,您可以整齐地返回页面,而不会错误地更改URL

e、 g


我在问题中犯了一个错误——两种方法都期望一个参数具有相同的“MyModel”类型。如果我更正此问题并应用您的解决方案,则编译器会抱怨“类型HomeController已使用相同的参数类型定义了名为Index的成员”。更新@sventevit:)只需添加(未使用的)
FormCollection
var to differenting.to@scgough-后续问题:当页面上有多个按钮且每个按钮都应调用自己的操作时,如何执行?那么动作方法不能全部命名为Index?@sventevit我会使用ajax(jquery)在每次按下按钮时发布表单数据(而不是像往常一样提交页面)。我在问题中犯了一个错误-这两种方法都期望一个参数具有相同的类型“MyModel”。如果我更正此问题并应用您的解决方案,则编译器会抱怨“类型HomeController已使用相同的参数类型定义了名为Index的成员”。更新@sventevit:)只需添加(未使用的)
FormCollection
var to differenting.to@scgough-后续问题:当页面上有多个按钮且每个按钮都应调用自己的操作时,如何执行?那么动作方法不能全部命名为Index?@sventevit我会使用ajax(jquery)在每次按下按钮时发布表单数据(而不是像平常一样提交页面)
[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);
    }
}