Skip to main content

WebGrid API changes - Migration Guide

Overview

ALVAO version 26.3 introduced breaking changes to the WebGrid base class to support async/await patterns and improve code organization. All classes that inherit from WebGrid need to be updated.

Summary of Changes

  1. InitialSelect()InitialSelectAsync()

    • Changed from synchronous to asynchronous
    • Now returns Task<SelectCallbackResponse> instead of SelectCallbackResponse
    • No longer needs to be overridden in derived classes
  2. New virtual method: OnInitialSelect(SelectCallbackResponse response)

    • Optional override for setting up initial parameters
    • Called automatically by InitialSelectAsync() before executing the response
  3. GetSelCallRes()GetSelectCallbackResponse()

    • Method renamed for clarity
    • Signature remains the same: SelectCallbackResponse GetSelectCallbackResponse(CallbackModel model)

Required Changes in Derived Classes

Change 1: Rename GetSelCallRes to GetSelectCallbackResponse

Before:

public override SelectCallbackResponse GetSelCallRes(CallbackModel model)
{
return new MySelectResponse(model, this);
}

After:

public override SelectCallbackResponse GetSelectCallbackResponse(CallbackModel model)
{
return model != null
? new MySelectResponse(model, this)
: new MySelectResponse(this);
}

Change 2: Remove InitialSelect() override and use OnInitialSelect() instead

Before:

public override SelectCallbackResponse InitialSelect()
{
SelectCallbackResponse resp = new MySelectResponse(this);
resp.Execute();
resp.AdditionalParameters["MyParam"] = MyValue.ToString();
return resp;
}

After:

public override void OnInitialSelect(SelectCallbackResponse response)
{
// Set up any initial parameters on the response if needed
response.AdditionalParameters["MyParam"] = MyValue.ToString();
}
note

If you didn't override InitialSelect() in your grid, you don't need to add OnInitialSelect() either. The base implementation handles everything.

Change 3: Update HandleCallbackAsync method

Before:

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

After:

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

If you didn't override HandleCallbackAsync() in your grid, you don't need to change anything.

Complete Example

Old Implementation:

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

New Implementation:

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

Key Points

  • InitialSelectAsync() is now in the base class - don't override it unless you have a very specific reason
  • Use OnInitialSelect() for setup - set additional parameters or perform initialization before the query executes
  • The base class handles async execution - you no longer need to call Execute() or ExecuteAsync() in InitialSelect()