How to prevent removing objects and fields from the query in ASP.NET Edition?
Last modified:
It is possible to deny removing datasources and uncheck fields from the query both server-side and client-side. Client-side checks allow for smoother user experience while server-side checks can be made for safety reasons and for checking manual changes to the query text.
Client-side:
var queryBuilder; var required = { table: 'Orders', field: { name: "OrderID", expression: "o.OrderID" } }; AQB.Web.onQueryBuilderReady(function (qb) { queryBuilder = qb; qb.on(qb.Events.DataSourceDeleting, onDataSourceDeleting); qb.on(qb.Events.DataSourceFieldRemoving, onDataSourceFieldRemoving); }); function onDataSourceDeleting(dataSource, abort) { if (isMainQuery() && dataSource.mdo.Name === required.table) { abort.abort = true; queryBuilder.StatusBarComponent.messageWarning('Removing the required table is locked.'); } } function onDataSourceFieldRemoving(field, abort) { if (isMainQuery() && field.field && field.field.object.NameStr === required.field.name && field.table.Name === required.table) { abort.abort = true; queryBuilder.StatusBarComponent.messageWarning('Removing the required field is locked.'); } } function isMainQuery() { return queryBuilder.ActiveSubQueryPath.length === 0; }
The full list of client-side events can be found in the documentation: AQB ASP.NET 3 - JavaScript API Documentation.
You can perform much deeper checks by analyzing the query server-side. Server-side events are listed here: AQB ASP.NET 3 - Server-side Objects Reference
Please review the "Verifying Query Elements" and "Query Analysis" demos in the C# MVC demo project for .NET Framework and ASP.NET Core. These demos are included in the installation package and available on GitHub:
Demos for .NET Framework:
Demos for ASP.NET Core: