Html.BeginForm()
. में एक बग है हेल्पर (वह जो कोई तर्क नहीं लेता) जब cookieless="true"
के साथ प्रयोग किया जाता है . यह यूआरएल उत्पन्न करते समय सत्र आईडी को ध्यान में नहीं रखता है। तो इसके बजाय:
<form action="/(S(kkt0zgbnuaoxad23ew33iod4))/home/index" method="post">
यह उत्पन्न करता है:
<form action="/home/index" method="post">
जब आप /home/index
. पर पोस्ट करते हैं एक रीडायरेक्ट स्वचालित रूप से /(S(kkt0zgbnuaoxad23ew33iod4))
पर किया जाता है एएसपी.नेट द्वारा। रीडायरेक्ट का मतलब 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())
{
...
}
जहां तक बिगिनफॉर्म हेल्पर के अन्य अधिभारों का संबंध है, उन्हें ठीक काम करना चाहिए और सत्र आईडी युक्त उचित कार्रवाई उत्पन्न करनी चाहिए।