![](/img/trans.png)
[英]Returning form, querystring, cookie values by priority in ASP.NET MVC
[英]ASP.NET MVC: Returning a view with querystring intact
我正在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'参数。
所以我猜我需要以某种方式维护我的查询字符串。 有没有办法做到这一点,还是我需要完全使用不同的方法?
我假设你做的事......
<% Html.BeginForm("Create", "Controller") { %>
<% } %>
当您通过路由创建表单的操作URL时,现有路由值将在此过程中丢失。 避免这种情况的最简单方法是使用BeginForm
的无参数版本,因为您在发布的页面上。
<% Html.BeginForm() { %>
<% } %>
这将使用当前url,查询字符串和all作为表单的ACTION。 否则,您需要将路由值传递to
BeginForm
重载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.