C'è un bug in Html.BeginForm() helper (quello che non accetta argomenti) se utilizzato con cookieless="true" . Non tiene conto dell'ID sessione durante la generazione dell'URL. Quindi invece di:
<form action="/(S(kkt0zgbnuaoxad23ew33iod4))/home/index" method="post">
genera:
<form action="/home/index" method="post">
Quando pubblichi su /home/index viene automaticamente effettuato un reindirizzamento a /(S(kkt0zgbnuaoxad23ew33iod4)) da ASP.NET. Un reindirizzamento significa una richiesta GET => la tua azione POST non verrà mai raggiunta.
Come soluzione alternativa potresti scrivere un Html.BeginForm personalizzato aiutante per correggere il bug:
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;
}
}
e poi usa:
@using (Html.MyBeginForm())
{
...
}
Per quanto riguarda gli altri overload dell'helper BeginForm, dovrebbero funzionare correttamente e generare un'azione appropriata contenente l'id di sessione.