Il y a un bogue dans le Html.BeginForm()
helper (celui qui ne prend aucun argument) lorsqu'il est utilisé avec cookieless="true"
. Il ne prend pas en compte l'identifiant de session lors de la génération de l'url. Donc au lieu de :
<form action="/(S(kkt0zgbnuaoxad23ew33iod4))/home/index" method="post">
il génère :
<form action="/home/index" method="post">
Lorsque vous publiez sur /home/index
une redirection est automatiquement faite vers /(S(kkt0zgbnuaoxad23ew33iod4))
par ASP.NET. Une redirection signifie une requête GET => votre action POST ne sera jamais touchée.
Comme solution de contournement, vous pouvez écrire un Html.BeginForm
personnalisé aide pour corriger le bogue :
public static class FormExtensions
{
public static IDisposable MyBeginForm(this HtmlHelper htmlHelper)
{
var rawUrl = htmlHelper.ViewContext.HttpContext.Request.RawUrl;
var formAction = htmlHelper.ViewContext.HttpContext.Response.ApplyAppPathModifier("~/") + rawUrl;
var builder = new TagBuilder("form");
builder.MergeAttributes(new RouteValueDictionary());
builder.MergeAttribute("action", formAction);
builder.MergeAttribute("method", HtmlHelper.GetFormMethodString(FormMethod.Post), true);
htmlHelper.ViewContext.Writer.Write(builder.ToString(TagRenderMode.StartTag));
var form = new MvcForm(htmlHelper.ViewContext);
return form;
}
}
puis utilisez :
@using (Html.MyBeginForm())
{
...
}
En ce qui concerne les autres surcharges de l'assistant BeginForm, elles devraient fonctionner correctement et générer une action appropriée contenant l'identifiant de session.