Přeskočit na hlavní obsah

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

  1. InitialSelect()InitialSelectAsync()

    • Změněno ze synchronního na asynchronní
    • Nyní vrací Task\<SelectCallbackResponse> místo SelectCallbackResponse
    • Už není třeba přepisovat ve zděděných třídách
  2. 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
  3. 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() nebo ExecuteAsync() v InitialSelect()