Có một lỗi trong Html.BeginForm()
helper (không sử dụng bất kỳ đối số nào) khi được sử dụng với cookieless="true"
. Nó không tính đến id phiên khi tạo url. Vì vậy, thay vì:
<form action="/(S(kkt0zgbnuaoxad23ew33iod4))/home/index" method="post">
nó tạo ra:
<form action="/home/index" method="post">
Khi bạn đăng lên /home/index
chuyển hướng được tự động thực hiện đến /(S(kkt0zgbnuaoxad23ew33iod4))
bởi ASP.NET. Chuyển hướng có nghĩa là yêu cầu GET => hành động ĐĂNG của bạn sẽ không bao giờ được thực hiện.
Để giải quyết vấn đề, bạn có thể viết một Html.BeginForm
tùy chỉnh người trợ giúp để sửa lỗi:
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;
}
}
và sau đó sử dụng:
@using (Html.MyBeginForm())
{
...
}
Đối với các quá tải khác của trình trợ giúp BeginForm, chúng sẽ hoạt động tốt và tạo ra hành động thích hợp có chứa id phiên.