Ada bug di Html.BeginForm()
helper (yang tidak menerima argumen apa pun) saat digunakan dengan cookieless="true"
. Itu tidak memperhitungkan id sesi saat membuat url. Jadi, alih-alih:
<form action="/(S(kkt0zgbnuaoxad23ew33iod4))/home/index" method="post">
itu menghasilkan:
<form action="/home/index" method="post">
Saat Anda memposting ke /home/index
pengalihan secara otomatis dibuat ke /(S(kkt0zgbnuaoxad23ew33iod4))
oleh ASP.NET. Pengalihan berarti permintaan GET => tindakan POST Anda tidak akan pernah berhasil.
Sebagai solusinya, Anda dapat menulis Html.BeginForm
khusus pembantu untuk memperbaiki 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;
}
}
lalu gunakan:
@using (Html.MyBeginForm())
{
...
}
Sejauh menyangkut kelebihan lain dari helper BeginForm, mereka harus bekerja dengan baik dan menghasilkan tindakan yang tepat yang berisi id sesi.