Změny API WebGrid - Průvodce migrací
Přehled
Verze ALVAO 26.3 představuje zásadní změny v základní třídě WebGrid na podporu vzorců async/await a ke zlepšení organizace kódu. Všechny třídy, které dědí z WebGrid, je třeba aktualizovat.
Souhrn změn
-
InitialSelect()→InitialSelectAsync()- Změněno ze synchronního na asynchronní
- Nyní vrací
Task\<SelectCallbackResponse>místoSelectCallbackResponse - Už není třeba přepisovat ve zděděných třídách
-
Nová virtuální metoda:
OnInitialSelect(SelectCallbackResponse response)- Volitelný přepis pro nastavení počátečních parametrů
- Automaticky voláno metodou
InitialSelectAsync()před spuštěním odpovědi
-
GetSelCallRes()→GetSelectCallbackResponse()- Metoda pro větší přehlednost přejmenována
- Podpis zůstává stejný:
SelectCallbackResponse GetSelectCallbackResponse(CallbackModel model)
Potřebné změny v odvozených třídách
✅ Změna 1: Přejmenujte GetSelCallRes na GetSelectCallbackResponse
Před:
public override SelectCallbackResponse GetSelCallRes(CallbackModel model)
{
return new MySelectResponse(model, this);
}
Po:
public override SelectCallbackResponse GetSelectCallbackResponse(CallbackModel model)
{
return model != null
? new MySelectResponse(model, this)
: new MySelectResponse(this);
}
✅ Změna 2: Odeberte přepsání metody InitialSelect() a místo ní použijte OnInitialSelect()
Před:
public override SelectCallbackResponse InitialSelect()
{
SelectCallbackResponse resp = new MySelectResponse(this);
resp.Execute();
resp.AdditionalParameters["MyParam"] = MyValue.ToString();
return resp;
}
Po:
public override void OnInitialSelect(SelectCallbackResponse response)
{
// Set up any initial parameters on the response if needed
response.AdditionalParameters["MyParam"] = MyValue.ToString();
}
Poznámka
Pokud jste nepřepisovali InitialSelect() ve své mřížce, nemusíte přidávat ani OnInitialSelect(). Základní implementace vše zpracovává.
✅ Změna 3: Aktualizujte metodu HandleCallbackAsync
Před:
public override async Task<CallbackResponse> HandleCallbackAsync(CallbackModel model)
{
CallbackResponse resp = null;
switch (model.callback)
{
case "select":
resp = GetSelCallRes(model);
await resp.ExecuteAsync();
break;
}
return resp;
}
Po:
public override async Task<CallbackResponse> HandleCallbackAsync(CallbackModel model)
{
CallbackResponse resp = null;
switch (model.callback)
{
case "select":
resp = GetSelectCallbackResponse(model);
await resp.ExecuteAsync();
break;
}
return resp;
}
Poznámka
Pokud jste nepřepisovali HandleCallbackAsync() ve své mřížce, nemusíte nic měnit.
Kompletní příklad
Stará implementace:
public class MyCustomGrid : WebGrid
{
public int EntityId { get; set; }
public override SelectCallbackResponse InitialSelect()
{
SelectCallbackResponse resp = new MySelectResponse(this);
resp.Execute();
resp.AdditionalParameters["EntityId"] = EntityId.ToString();
return resp;
}
public override SelectCallbackResponse GetSelCallRes(CallbackModel model)
{
return new MySelectResponse(model, this);
}
}
Nová implementace:
public class MyCustomGrid : WebGrid
{
public int EntityId { get; set; }
public override void OnInitialSelect(SelectCallbackResponse response)
{
response.AdditionalParameters["EntityId"] = EntityId.ToString();
}
public override SelectCallbackResponse GetSelectCallbackResponse(CallbackModel model)
{
return model != null
? new MySelectResponse(model, this)
: new MySelectResponse(this);
}
}
Klíčové body
InitialSelectAsync()je nyní v základní třídě - nepřepisujte ji, pokud nemáte konkrétní důvod- Použijte
OnInitialSelect()pro nastavení - nastavte další parametry nebo proveďte inicializaci před spuštěním dotazu - Základní třída obsluhuje asynchronní spuštění - už nemusíte volat
Execute()neboExecuteAsync()vInitialSelect()