1

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

4

1 回答 1

3

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

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

但这将发布到相同的资源。如果你想指定一个不同的控制器和/或动作,你可以编写一个自定义的 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 查询字符串参数。

于 2013-10-23T13:43:55.913 回答