添加控制器操作的所有查询字符串

时间:2013-10-23 13:31:16

标签: asp.net-mvc-4

我有一个简单的mvc4应用程序。操作链接打开一个包含查询字符串参数的视图。当您单击提交按钮时,视图包含一个简单的表单,它会发布表单并返回到视图但我丢失了查询字符串。即使在提交表单后,我必须做些什么才能拥有相同的查询字符串?

1 个答案:

答案 0 :(得分:3)

一种可能性是将当前请求指定为表单的action属性:

<form action="@Request.Url.AbsoluteUri" method="post">
    ...
</form>

但是这将POST到相同的资源。如果要指定不同的控制器和/或操作,可以编写一个自定义的BeginForm帮助程序来完成这项工作。

有些事情:

public static class FormExtensions
{
    public static IDisposable MyBeginForm(this HtmlHelper html, string controller, string action)
    {
        var builder = new TagBuilder("form");
        var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
        var routeValues = new RouteValueDictionary();
        var query = html.ViewContext.RequestContext.HttpContext.Request.QueryString;
        foreach (string key in query)
        {
            routeValues[key] = query[key];
        }

        builder.MergeAttribute("action", urlHelper.Action(action, controller, routeValues));
        builder.MergeAttribute("method", "POST", true);

        html.ViewContext.Writer.Write(builder.ToString(TagRenderMode.StartTag));
        var form = new MvcForm(html.ViewContext);
        return form;
    }
}

然后:

@using (Html.MyBeginForm("myaction", "mycontroller"))
{
    ...
}

这将有效地保留当前的url查询字符串参数。