Html.BeginForm()
にバグがあります cookieless="true"
とともに使用する場合のヘルパー(引数を取らないもの) 。 URLを生成するときにセッションIDは考慮されません。代わりに:
<form action="/(S(kkt0zgbnuaoxad23ew33iod4))/home/index" method="post">
生成されます:
<form action="/home/index" method="post">
/home/index
に投稿するとき /(S(kkt0zgbnuaoxad23ew33iod4))
へのリダイレクトが自動的に行われます。 ASP.NETによる。リダイレクトとは、GETリクエスト=>POSTアクションがヒットしないことを意味します。
回避策として、カスタムのHtml.BeginForm
を作成できます。 バグを修正するためのヘルパー:
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;
}
}
次に使用します:
@using (Html.MyBeginForm())
{
...
}
BeginFormヘルパーの他のオーバーロードに関する限り、それらは正常に機能し、セッションIDを含む適切なアクションを生成する必要があります。