繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM