使用Html.BeginForm()时保持获取参数

时间:2013-06-13 06:54:43

标签: asp.net-mvc parameters

当我使用Html.BeginForm()执行GET-Request时,是否可以保留我的GET参数。我不要输入任何硬编码的视图和控制器。

当我尝试

    @using (Html.BeginForm())

保持我的GET-params(sort,page,sortdir等......)。但是它正在发布我的参数。+

当我尝试

    @using (Html.BeginForm(null, null, FormMethod.GET))

params被重置,我只有我使用表单发送的新GET-param。

这个问题的解决方案是什么? :)

1 个答案:

答案 0 :(得分:1)

  

这个问题的解决方案是什么? :)

编写一个自定义Html.BeginForm帮助程序,它将按您的意愿运行:

using System;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;

public static class FormExtensions
{
    public static IDisposable MyBeginForm(this HtmlHelper html, string action, string controller, FormMethod method)
    {
        var routeValues = new RouteValueDictionary();
        var query = html.ViewContext.HttpContext.Request.QueryString;
        foreach (string key in query)
        {
            routeValues[key] = query[key];
        }
        return html.BeginForm(action, controller, routeValues, FormMethod.Get);
    }
}

然后在您的视图中使用此自定义帮助程序而不是默认帮助程序:

@using (Html.MyBeginForm(null, null, FormMethod.Get))
{ 
    ...
}

如果您不想编写自定义帮助程序(不推荐),您还可以通过编写以下可捕获当前查询字符串参数的恐怖来损害您的视图:

@using (Html.BeginForm(null, null, new RouteValueDictionary(Request.QueryString.Keys.Cast<string>().ToDictionary(key => key, key => (object)Request.QueryString[key])), FormMethod.Get))
{ 
    ...    
}