Last week I blogged about SEO lowercase URLs, a concept known to
many, and I blatantly stole the idea for the post from someone
else. Today I'm gonna try to build on the other post, actually
providing some input of my own, and show how one can easily do
custom property validation, without having to write your own custom
property. Having custom properties can be a tedious way to work,
when all you essentially have is a string property, or a
PageReference. The other post contains the code for hooking
into events, so I suggest you get it from there if you have no
idea where to put this.
First, we hook into the event
DataFactory.Instance.SavingPage.
void Instance_SavingPage(object sender, PageEventArgs e) {
// Check if the page is a ReferenceContainer
if (e.Page is ReferenceContainer) {
var refContainer = e.Page as ReferenceContainer;
// Check if the property OfficePage has a value
if (!PageReference.IsNullOrEmpty(refContainer.OfficePage)) {
var office = refContainer.OfficePage.GetPage();
// Check if the page selected in the OfficePage property is of the correct type.
if (!(office is OfficePage)) {
e.CancelAction = true;
e.CancelReason = LanguageManager.Instance.Translate("/errors/validation/properties/OfficePage");
}
}
}
// Check if the page is an OfficePage
if (e.Page is OfficePage) {
var officePage = e.Page as OfficePage;
// Check if the property ReferenceContainer has a value
if (!PageReference.IsNullOrEmpty(officePage.ReferenceContainer)) {
var refContainer = officePage.ReferenceContainer.GetPage();
// Check if the page selected in the ReferenceContainer property is of the correct type.
if (!(refContainer is ReferenceContainer)) {
e.CancelAction = true;
e.CancelReason = LanguageManager.Instance.Translate("/errors/validation/properties/ReferenceContainer");
}
}
}
}
Basically, we try to get the page from the PageReference
property, if it's set, and check if it's of the correct type using
functionality in PageTypeBuilder. PageTypeBuilder, I love you.
As always, comments are welcome, maybe I've tried to solve this
whole issue the wrong way. Please let me know if I did :)