我有一个简单的mvc4应用程序。操作链接打开一个包含查询字符串参数的视图。当您单击提交按钮时,视图包含一个简单的表单,它会发布表单并返回到视图但我丢失了查询字符串。即使在提交表单后,我必须做些什么才能拥有相同的查询字符串?
答案 0 :(得分:3)
一种可能性是将当前请求指定为表单的action
属性:
<form action="@Request.Url.AbsoluteUri" method="post">
...
</form>
但是这将POST到相同的资源。如果要指定不同的控制器和/或操作,可以编写一个自定义的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查询字符串参数。