Es gibt einen Fehler in Html.BeginForm()
Helfer (derjenige, der keine Argumente akzeptiert), wenn er mit cookieless="true"
verwendet wird . Die Sitzungs-ID wird beim Generieren der URL nicht berücksichtigt. Also statt:
<form action="/(S(kkt0zgbnuaoxad23ew33iod4))/home/index" method="post">
es generiert:
<form action="/home/index" method="post">
Wenn Sie an /home/index
posten es erfolgt automatisch eine Umleitung zu /(S(kkt0zgbnuaoxad23ew33iod4))
von ASP.NET. Eine Umleitung bedeutet eine GET-Anforderung => Ihre POST-Aktion wird niemals getroffen.
Als Problemumgehung könnten Sie ein benutzerdefiniertes Html.BeginForm
schreiben Helfer, um den Fehler zu beheben:
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;
}
}
und verwenden Sie dann:
@using (Html.MyBeginForm())
{
...
}
Soweit die anderen Überladungen des BeginForm-Hilfsprogramms betroffen sind, sollten sie gut funktionieren und die richtige Aktion generieren, die die Sitzungs-ID enthält.