Upgrading from 2.5 to 3.0
See Release notes of DotVVM 3.0 for complete list of changes.
Breaking changes
Null propagation now passes nulls into methods
Previously, any binding expression which evaluated to null
caused to evaluate the parent expression to null
as well. If there was a method call in the expression, and any of the arguments evaluated to null
, the entire method call was skipped and evaluated to null
. We changed this behavior so the null
is passed in the method.
Script resources use defer by default
DotVVM resources were marked as deferred, which means that all other scripts that depend on DotVVM need to use defer
, otherwise they would load before DotVVM and fail. We have changed the default behavior of ScriptResource
so the Defer
property is true
by default, but it can break scripts which explicitly set it to false
.
Async IUploadedFileStorage and IReturnedFileStorage
We changed these interfaces to use async methods everywhere. The behavior hasn't changed, you'll only need to add await
to the GetFile
or ReturnFile
calls, and change them to GetFileAsync
/ ReturnFileAsync
.
Type-safe viewmodels
Objects in the viewmodel now always have the $type
property which contains unique ID of the concrete type. Also, DotVVM validates all values in the viewmodel as part of the "coercion" process.
If you use unsupported types in the viewmodels, you may get JavaScript errors and the page won't load. We have released a few hotfixes to support Dictionary<K,V>
, TimeSpan
and DateTimeOffset
to not break the page. These types are still not officially supported, but if you happen to use them in the viewmodel, the page will not throw JS errors.
Client-side events and postback pipeline
We changed the order of some DotVVM JavaScript events, and renamed some properties in event arguments objects passed to the even listeners. We have removed xhr
parameter from all event arguments as we are now using fetch
API.
JavaScript value for CheckBox was changed
The input[type=checkbox]
value is now "on"
/"off"
instead of true
/false
. If you interact with checkboxes from your JS code, make sure these new values are reflected.
DotVVM Knockout binding handles renamed
If you used some Knockout binding handlers added by DotVVM in your own control, check out if they still work. We have renamed and reorganized some of them - for example, dotvvmEnable
was renamed to dotvvm-enabled
.