2013-10-23 94 views
1

我有一个简单的mvc4应用程序。一个动作链接用一堆查询字符串参数打开一个视图。该视图包含一个简单的表单,当你点击提交按钮后发布表单并返回到视图,但我失去了查询字符串。甚至在您提交表单之后,我必须做些什么才能获得相同的查询字符串?添加控制器动作上的所有查询字符串

回答

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查询字符串参数。

相关问题