sql >> Databáze >  >> RDS >> Sqlserver

Proč Asp.net MVC4 nemůže používat úložiště stavu relace serveru SQL Server bez souborů cookie

V Html.BeginForm() je chyba pomocník (ten, který nebere žádné argumenty) při použití s ​​cookieless="true" . Při generování adresy URL nebere v úvahu ID relace. Takže místo:

<form action="/(S(kkt0zgbnuaoxad23ew33iod4))/home/index" method="post">

generuje:

<form action="/home/index" method="post">

Když zveřejníte příspěvek na /home/index automaticky se přesměruje na /(S(kkt0zgbnuaoxad23ew33iod4)) od ASP.NET. Přesměrování znamená požadavek GET => vaše akce POST nebude nikdy zasažena.

Jako řešení můžete napsat vlastní Html.BeginForm pomocník k opravě chyby:

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;
    }
}

a poté použijte:

@using (Html.MyBeginForm())
{
    ...
}

Pokud jde o ostatní přetížení pomocníka BeginForm, měla by fungovat dobře a generovat správnou akci obsahující ID relace.




  1. Opakování hodnot, vytváření dynamických dotazů a přidávání do sady výsledků

  2. Chyba připojení - SQLSTATE[HY000] [2002] Časový limit operace vypršel

  3. Použití příkazu IF ELSE založeného na počtu k provedení různých příkazů Insert

  4. Jak provedu dotazy po připojení DB v Rails?