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