ExecuteCore () MVC 4 Beta'da işləməyən bir əsas sinifdə

Bir əsas nəzarətçi sinfi var:

Bütün digər nəzarətçim bu kimi BaseClass'i devralır

Bütün bunlar MVC3-də gözəl işləyir (bu gün yenidən test edin, həqiqətən də işləyir), lakin BaseControllerdə ExecuteCore artıq MVC 4-in beta versiyasında başlamır.

Hər hansı bir fikir? Və başlıq altında böyük bir şey dəyişdi? Çox sağ olun.

 public class BaseController : Controller { private string _myData; public string MyData { get { return _myData; } } protected override void ExecuteCore() { _myData = "I am doing something"; base.ExecuteCore(); } } public class HomeController : BaseController { public ActionResult Index() { ViewBag.MyData = MyData; // Doing something with value in BaseClass return View(); } } 
26
04 марта '12 в 16:03 2012-03-04 16:03 BladeLeaf 04 mart '12 'də saat 16:03 ' da təyin olundu
@ 3 cavab

Probleminizi çoxaltmaq mümkün oldu. Görünür, ExecuteCore un istifadəsi dəyişir. Amma bu barədə heç bir məlumat tapmadım. Hesab edirəm ki, bu, Controller artıq IAsyncController deyil tətbiq edir.

Ancaq, MVC4 ilə köhnə davranışı almaq üçün bir həll yolunu tapdım:

Bunun üçün BaseContoller əlavə edin:

 protected override bool DisableAsyncSupport { get { return true; } } 

DisableAsyncSupport üçün MSDN səhifəsində (mənə əlavə et):

Bu bayraq arxa uyğunluq üçün . ASP.NET MVC 4. nəzarətçiyə asynchronous şablonları dəstəkləməyə imkan verir. Yəni, ExecuteCore türetilmiş siniflərdə deyil. Türetilmiş dərslər, bu bayraqları ləğv edə bilər və əgər onlar hələ də ExecuteCore üçün ExecuteCore ehtiyac ExecuteCore doğru oluna bilər.

28
04 марта '12 в 19:02 2012-03-04 19:02 Cavab verilir nemesv 04 mart '12 saat 19:02 2012-03-04 19:02

Mən nemesv üçün səs verdim, çünki o, mənə nə baş verdiyini izah etdi. MVC3 və MVC4 layihələrim var və məni narahat etdi.

Ancaq başqa bir həll var. Controller sinifində Initialize metodunu ləğv edin:

border=0
 public abstract class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { string > 

Sonra layihənizdə nəzarətçilərinizi BaseController-dan devralın və bütün bunlar BaseController-in çağırışının avtomatik olaraq istək kontekstindən keçdiyini bildirir. Həm MVC3, həm də MVC4 üçün işləyir.

28
15 апр. Alfonso Muñoz'un aprelin 15-də verdiyi cavabı 2012-04-15 14:35 '12 at 2:35 PM 2012-04-15 14:35

Siz həmçinin BeginExecuteCore istifadə edə bilərsiniz

 protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) { return base.BeginExecuteCore(callback, state); } 
7
18 сент. Cavab LungFungus 18 sep tərəfindən verilir . 2013-09-18 23:58 '13 at 11:58 pm 2013-09-18 23:58