Я только что столкнулся с той же проблемой, но, возможно, лучшее решение основано на ответе Дарина Димитрова .
Хитрость заключается в создании базового типа страницы на основе WebViewPage<T>
class, базовый класс по умолчанию для представлений и выполните обмен FormContext
там.
abstract public class FormFixWebViewPage : FormFixWebViewPage<object>
{
}
abstract public class FormFixWebViewPage<T> : WebViewPage<T>
{
override public void Write(System.Web.WebPages.HelperResult result)
{
var originalFormContext = ViewContext.FormContext;
ViewContext.FormContext = new FormContext();
base.Write(result);
ViewContext.FormContext = originalFormContext;
}
}
А затем в файле Web.config
подПапка ~/Views/
, измените атрибут pageBaseType
в элементе pages
, который находится в разделе system.web.webPages.razor
:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="<YOUR-NAMESPACE>.FormFixWebViewPage">
<!--pages pageBaseType="System.Web.Mvc.WebViewPage"-->
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>