ASP.NET MVC:返回查询字符串完整的视图

时间:2010-05-19 22:53:10

标签: asp.net-mvc error-handling query-string

我正在ASP.NET中创建一个消息传递Web应用程序,如果他们发送消息并且出现错误,则在向用户显示错误消息时会遇到一些问题。

用户可以查看人物的个人资料,然后点击“发送消息”。调用以下操作(url是/ message / create?to = username)并向他们显示一个页面,他们可以在其中输入消息并发送它:

public ActionResult Create(string to)
{
    ViewData["recipientUsername"] = to;

    return View();
}

在显示的页面上,用户名输入到隐藏的输入字段。当用户点击“发送”时:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection, string message)
{
    try
    {
        //do message stuff that errors out
    }
    catch
    {
        ModelState.AddModelErrors(message.GetRuleViolations()); //adding errors to modelstate
    }

    return View();
}

所以现在错误消息向用户显示,但是更改了url,因为它不再具有查询字符串(/ message / create)。同样,这很好,除非当用户点击刷新按钮时,页面出错,因为Create操作不再具有'to'参数。

所以我猜我需要以某种方式维护我的查询字符串。有没有办法做到这一点,还是我需要完全使用不同的方法?

2 个答案:

答案 0 :(得分:3)

我假设你正在做类似......

<% Html.BeginForm("Create", "Controller") { %>

<% } %>

当您通过路由创建表单的操作URL时,现有路由值将在此过程中丢失。避免这种情况的最简单方法是使用无参数版本的BeginForm,因为您位于要发布的页面上。

<% Html.BeginForm() { %>

<% } %>

这将使用当前url,查询字符串和all作为表单的ACTION。否则,您需要在to重载中传递路由值BeginForm

答案 1 :(得分:1)