Upgrading from 2.5 to 3.0
See Release notes of DotVVM 3.0 for complete list of 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
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
ReturnFile calls, and change them to
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.
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
xhr parameter from all event arguments as we are now using
input[type=checkbox] value is now
"off" instead of
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