76 lines
4.2 KiB
C#
76 lines
4.2 KiB
C#
|
namespace System.Web.ModelBinding {
|
|||
|
using System;
|
|||
|
using System.Globalization;
|
|||
|
|
|||
|
// Provides configuration settings common to the new model binding system.
|
|||
|
public static class ModelBinderErrorMessageProviders {
|
|||
|
|
|||
|
private static ModelBinderErrorMessageProvider _typeConversionErrorMessageProvider;
|
|||
|
private static ModelBinderErrorMessageProvider _valueRequiredErrorMessageProvider;
|
|||
|
|
|||
|
public static ModelBinderErrorMessageProvider TypeConversionErrorMessageProvider {
|
|||
|
get {
|
|||
|
if (_typeConversionErrorMessageProvider == null) {
|
|||
|
_typeConversionErrorMessageProvider = DefaultTypeConversionErrorMessageProvider;
|
|||
|
}
|
|||
|
return _typeConversionErrorMessageProvider;
|
|||
|
}
|
|||
|
set {
|
|||
|
_typeConversionErrorMessageProvider = value;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static ModelBinderErrorMessageProvider ValueRequiredErrorMessageProvider {
|
|||
|
get {
|
|||
|
if (_valueRequiredErrorMessageProvider == null) {
|
|||
|
_valueRequiredErrorMessageProvider = DefaultValueRequiredErrorMessageProvider;
|
|||
|
}
|
|||
|
return _valueRequiredErrorMessageProvider;
|
|||
|
}
|
|||
|
set {
|
|||
|
_valueRequiredErrorMessageProvider = value;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static string DefaultTypeConversionErrorMessageProvider(ModelBindingExecutionContext modelBindingExecutionContext, ModelMetadata modelMetadata, object incomingValue) {
|
|||
|
return GetResourceCommon(modelBindingExecutionContext, modelMetadata, incomingValue, GetValueInvalidResource);
|
|||
|
}
|
|||
|
|
|||
|
private static string DefaultValueRequiredErrorMessageProvider(ModelBindingExecutionContext modelBindingExecutionContext, ModelMetadata modelMetadata, object incomingValue) {
|
|||
|
return GetResourceCommon(modelBindingExecutionContext, modelMetadata, incomingValue, GetValueRequiredResource);
|
|||
|
}
|
|||
|
|
|||
|
private static string GetResourceCommon(ModelBindingExecutionContext modelBindingExecutionContext, ModelMetadata modelMetadata, object incomingValue, Func<ModelBindingExecutionContext, string> resourceAccessor) {
|
|||
|
string displayName = modelMetadata.GetDisplayName();
|
|||
|
string errorMessageTemplate = resourceAccessor(modelBindingExecutionContext);
|
|||
|
string errorMessage = String.Format(CultureInfo.CurrentCulture, errorMessageTemplate, incomingValue, displayName);
|
|||
|
return errorMessage;
|
|||
|
}
|
|||
|
|
|||
|
private static string GetUserResourceString(ModelBindingExecutionContext modelBindingExecutionContext, string resourceName) {
|
|||
|
#if UNDEF
|
|||
|
return GetUserResourceString(modelBindingExecutionContext, resourceName, DefaultModelBinder.ResourceClassKey);
|
|||
|
#endif
|
|||
|
return GetUserResourceString(modelBindingExecutionContext, resourceName, String.Empty);
|
|||
|
}
|
|||
|
|
|||
|
// If the user specified a ResourceClassKey try to load the resource they specified.
|
|||
|
// If the class key is invalid, an exception will be thrown.
|
|||
|
// If the class key is valid but the resource is not found, it returns null, in which
|
|||
|
// case it will fall back to the MVC default error message.
|
|||
|
internal static string GetUserResourceString(ModelBindingExecutionContext modelBindingExecutionContext, string resourceName, string resourceClassKey) {
|
|||
|
return (!String.IsNullOrEmpty(resourceClassKey) && (modelBindingExecutionContext != null) && (modelBindingExecutionContext.HttpContext != null))
|
|||
|
? modelBindingExecutionContext.HttpContext.GetGlobalResourceObject(resourceClassKey, resourceName, CultureInfo.CurrentUICulture) as string
|
|||
|
: null;
|
|||
|
}
|
|||
|
|
|||
|
private static string GetValueInvalidResource(ModelBindingExecutionContext modelBindingExecutionContext) {
|
|||
|
return GetUserResourceString(modelBindingExecutionContext, "PropertyValueInvalid") ?? SR.GetString(SR.ModelBinderConfig_ValueInvalid);
|
|||
|
}
|
|||
|
|
|||
|
private static string GetValueRequiredResource(ModelBindingExecutionContext modelBindingExecutionContext) {
|
|||
|
return GetUserResourceString(modelBindingExecutionContext, "PropertyValueRequired") ?? SR.GetString(SR.ModelBinderConfig_ValueRequired);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|