我正在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'参数。
所以我猜我需要以某种方式维护我的查询字符串。有没有办法做到这一点,还是我需要完全使用不同的方法?
答案 0 :(得分:3)
我假设你正在做类似......
<% Html.BeginForm("Create", "Controller") { %>
<% } %>
当您通过路由创建表单的操作URL时,现有路由值将在此过程中丢失。避免这种情况的最简单方法是使用无参数版本的BeginForm
,因为您位于要发布的页面上。
<% Html.BeginForm() { %>
<% } %>
这将使用当前url,查询字符串和all作为表单的ACTION。否则,您需要在to
重载中传递路由值BeginForm
。
答案 1 :(得分:1)