1
我有一個簡單的mvc4應用程序。一個動作鏈接用一堆查詢字符串參數打開一個視圖。該視圖包含一個簡單的表單,當你點擊提交按鈕後發佈表單並返回到視圖,但我失去了查詢字符串。甚至在您提交表單之後,我必須做些什麼才能獲得相同的查詢字符串?添加控制器動作上的所有查詢字符串
我有一個簡單的mvc4應用程序。一個動作鏈接用一堆查詢字符串參數打開一個視圖。該視圖包含一個簡單的表單,當你點擊提交按鈕後發佈表單並返回到視圖,但我失去了查詢字符串。甚至在您提交表單之後,我必須做些什麼才能獲得相同的查詢字符串?添加控制器動作上的所有查詢字符串
一種可能性是指定當前請求爲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查詢字符串參數。