Quantcast
Channel: xval Discussions Rss Feed
Viewing all articles
Browse latest Browse all 21

New Post: xVal build against newes Castle Components Validator 1.1.1.0 with language support

$
0
0

I've finaly get it work.

I have some conclusions:

  • language resources from original Castle.Components.Validator assembly does not work
  • Messages.XX.resx files copied to my Assembly and put to CachedValidationRegistry work
  • because it is CACHEDValidationRegistry it works only for first time when field validation is involved so it's not possible to wired it up on App Start and change Current Cultrue in App BeginRequest
  • the BIGGEST conclusion is that javascript language messages doesn't work for CastleValidation because messages form resource files are threated as custom messages

Code change:

In CastleValidatorRulesProvider

private IEnumerable<Rule> ConvertToXValRules(IValidator val)
        {var rules = ruleEmitters.EmitRules(val);if (!string.IsNullOrEmpty(val.ErrorMessage))foreach (var rule in rules)
                    rule.ErrorMessage = val.ErrorMessage;return rules;
        }

should be

private IEnumerable<Rule> ConvertToXValRules(IValidator val) {var rules = ruleEmitters.EmitRules(val);if (!string.IsNullOrEmpty(val.ErrorMessage))foreach (var rule in rules)
                    rule.ErrorMessage = MessageIfSpecified(val.ErrorMessage);return rules;
        }
privatestaticstringMessageIfSpecified( string message ) {// We don't want to display the default {validator.*} messagesif( ( message != null ) && !message.StartsWith( "castlevalidator." ) ) {return message;
		}returnnull;
	}

 And in CachedValidationRegistry

publicstring GetStringFromResource(string key)
		{if (resourceManager != null)
			{
				ResourceSet resourceSet = resourceManager.GetResourceSet(Thread.CurrentThread.CurrentCulture, true, true);string result = resourceSet.GetString(key);if (result != null)return"castlevalidator." + result;
			}
			ResourceSet defaultResourceSetForCurrentThread =
				defaultResourceManager.GetResourceSet( Thread.CurrentThread.CurrentCulture, true, true );return"castlevalidator." + defaultResourceSetForCurrentThread.GetString(key);
		}

For now i've only changed ConvertToXValRulesto this rule.ErrorMessage = null; and javascript language messages work.


Viewing all articles
Browse latest Browse all 21

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>