2013-10-23 24 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查詢字符串參數。

相關問題