我有一个简单的 mvc4 应用程序。一个操作链接会打开一个带有一堆查询字符串参数的视图。当您单击提交按钮时,视图包含一个简单的表单,它会发布表单并返回视图,但我丢失了查询字符串。即使您提交了表单,我必须做什么才能拥有相同的查询字符串?
问问题
735 次
1 回答
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 查询字符串参数。
于 2013-10-23T13:43:55.913 回答