Er zit een fout in de Html.BeginForm()
helper (degene die geen argumenten aanneemt) bij gebruik met cookieless="true"
. Het houdt geen rekening met de sessie-ID bij het genereren van de url. Dus in plaats van:
<form action="/(S(kkt0zgbnuaoxad23ew33iod4))/home/index" method="post">
het genereert:
<form action="/home/index" method="post">
Wanneer je een bericht plaatst op /home/index
er wordt automatisch een omleiding gemaakt naar /(S(kkt0zgbnuaoxad23ew33iod4))
door ASP.NET. Een omleiding betekent een GET-verzoek => uw POST-actie wordt nooit bereikt.
Als tijdelijke oplossing zou je een aangepast Html.BeginForm
. kunnen schrijven helper om de bug op te lossen:
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;
}
}
en gebruik dan:
@using (Html.MyBeginForm())
{
...
}
Wat de andere overbelastingen van de BeginForm-helper betreft, deze zouden goed moeten werken en de juiste actie moeten genereren die de sessie-ID bevat.