我的网址看起来像这样:
customer/login?ReturnUrl=home
在登录视图中,我使用了这种代码模式,工作正常。
@using(Html.BeginForm())
{
...
}
这神奇地生成以下html
<form action="customer/login?ReturnUrl=home" method="post">
但现在,我需要在表单中添加一个属性(例如data-id="something"
)。我怎样才能做到这一点?如果我没有任何查询字符串,我知道我可以这样做:
@using(Html.BeginForm(action, controller, FormMethod.Post,
new { data_id="something" }))
但是不知道如何添加应该在html中的查询字符串:
<form action="customer/login?ReturnUrl=home" method="post" data-id="something">
我想过直接使用<form>
但不知道如何指定可变的查询字符串。我不知道如何使用Html.BeginForm
来实现它。任何提示将不胜感激。
解决:
目前,我使用了<form>
以下提示How to get current url value in View。生成的视图看起来像
<form action="@Request.Url.PathAndQuery" data-id="something" method="POST">
但是为此设置一个BeginForm
的重载方法会很好。
答案 0 :(得分:19)
这是对我有用的方式
Html.BeginForm("Profile", "Partner", routeValues: new {id=Partner.partner_id},method:FormMethod.Post)
这几乎就像重载方法有问题,但是通过指定什么东西,它似乎工作得很好......
答案 1 :(得分:17)
从查询字符串创建RouteValueDictionary:
RouteValueDictionary queryStringDictionary = new RouteValueDictionary(Request.QueryString.AllKeys.ToDictionary(key => key, key => (object)Request.QueryString[key]));
然后你可以将它与Html.BeginForm:
一起使用Html.BeginForm(null, null, queryStringDictionary, FormMethod.Post, new Dictionary<string, object> { { "autocomplete", "off" } })
答案 2 :(得分:15)
我想这并没有直接回答这个问题,但为什么不使用普通的旧表格标签呢?
<form action='customer/login?ReturnUrl=@Request.QueryString["ReturnUrl"]' method="post" data-id="something">
或者,您可以创建一个自定义HtmlHelperExtension,用于呈现带有路径和查询字符串的表单。在这个HtmlHelperExtension中,您可以遍历查询字符串值并填充routeValueDictionary,然后将其传递给Html.BeginForm构造函数。
如果你不想要那么可扩展的东西,你可以使用Html.BeginForm的重载构造函数
@Html.BeginForm("login", "customer", new {ReturnUrl = @Request.QueryString["ReturnUrl"]},FormMethod.Post, new {data-id="something"});
答案 3 :(得分:3)
使用Reflector查看代码,
BeginForm()会将rawUrl直接传递给最终的Form。 BeginForm上的任何其他重载都将通过一个帮助器实用程序来删除查询字符串。
答案 4 :(得分:0)
尝试@using(Html.BeginForm(null, null, FormMethod.Post, new { data_id="something" }))
它应该使用默认逻辑来构造网址,就像使用BeginForm()
(虽然在这种情况下从未尝试过,但我相信它应该有用)
答案 5 :(得分:0)
这对我有用:
@using (Html.BeginForm("index", "Photos", routeValues: new { user = pUser, album = pAlbum, }, method: FormMethod.Get))
显式路线值和方法是必需的......
答案 6 :(得分:0)
只是想要添加其他属性。使用下面的代码
@using (Html.BeginForm("actionName", "controllerName", routeValues: new { lang = "en" }, method:FormMethod.Post, htmlAttributes: new { @class= "my-form", enctype = "multipart/form-data" }))