【发布时间】:2011-01-13 00:35:10
【问题描述】:
我发现Html.BeginForm() 自动使用 RawUrl(即 QueryStringParamters)填充 routeValueDictionary。但是我需要指定一个 HtmlAttribute 所以我需要使用覆盖...
public static MvcForm BeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName, FormMethod method, object htmlAttributes)
当我这样做时,QueryString 值不会自动添加到 RouteValueDictionary。我怎样才能做到这一点?
这是我最好的尝试,但它似乎不起作用。
<% RouteValueDictionary routeValueDictionary = new RouteValueDictionary(ViewContext.RouteData.Values);
foreach (string key in Request.QueryString.Keys )
{
routeValueDictionary[key] = Request.QueryString[key].ToString();
}
using (Html.BeginForm("Login", "Membership", routeValueDictionary, FormMethod.Post, new { @class = "signin-form" }))
{%> ...
我的控制器动作看起来像这样......
[HttpPost]
public ActionResult Login(Login member, string returnUrl)
{ ...
但作为 QueryString 一部分的“returnUrl”的值始终为 NULL,除非我在视图中使用默认的无参数 Html.BeginForm()。
谢谢, 贾斯汀
【问题讨论】:
-
你从未在你的路由值字典中提到
returnUrl,或者你有? -
RouteValueDictionary 变量假定填充了 Request.QueryString 中的所有键/值对。我可以通过使用 new { returnUrl = Request.QueryString["ReturnUrl"] } 来破解它,但是如果查询字符串中的 ReturnUrl 不止一个怎么办。
-
你的代码生成的
<form>标签是什么样子的?我问的原因是因为在可行的情况下,您可能会发布到像“mysite.com?returnUrl=foobar”这样的网址
标签: asp.net-mvc html.beginform querystringparameter