Dec 14, 2012, 7:07 AM
While we wait for an answer by one of the dev team, how do you set the IDas nullable?
Thanks..
Thanks..
public static ModelField CreateModelFieldFromMeta(ModelMetadata propertyMetadata, Ext.Net.Model storeModel = null, ModelFieldAttribute modelAttr = null, ControllerContext controllerContext = null)
{
var modelField = new ModelField();
if (modelAttr == null)
{
modelAttr = propertyMetadata.AdditionalValues.ContainsKey(ModelFieldAttribute.KEY) ? (ModelFieldAttribute)propertyMetadata.AdditionalValues[ModelFieldAttribute.KEY] : null;
}
modelField.Name = propertyMetadata.PropertyName;
modelField.Type = TypeUtils.MappingModelFieldType(propertyMetadata.ModelType);
if (propertyMetadata.IsComplexType && modelAttr != null)
{
modelField.IsComplex = true;
}
if (modelAttr != null && storeModel != null)
{
modelAttr.CopyTo(modelField, storeModel);
}
if(storeModel != null)
{
storeModel.Fields.Add(modelField);
}
ValidationCollection validations = new ValidationCollection();
if (propertyMetadata.AdditionalValues.ContainsKey(AbstractValidationAttribute.KEY))
{
validations = (ValidationCollection)propertyMetadata.AdditionalValues[AbstractValidationAttribute.KEY];
}
if (controllerContext != null)
{
foreach (ModelValidator v in propertyMetadata.GetValidators(controllerContext))
{
var rule = v.GetClientValidationRules().FirstOrDefault();
if (rule != null)
{
switch (rule.ValidationType)
{
case "required":
if (storeModel.IDProperty != modelField.Name)
{
validations.Add(new PresenceValidation { Field = modelField.Name, Message = rule.ErrorMessage });
}
break;
case "regex":
if (rule.ValidationParameters.ContainsKey("pattern"))
{
validations.Add(new FormatValidation { Field = modelField.Name, Matcher = rule.ValidationParameters["pattern"].ToString(), Message = rule.ErrorMessage });
}
break;
case "length":
var lengthVal = new LengthValidation();
if (rule.ValidationParameters.ContainsKey("max"))
{
lengthVal.Max = (int)Convert.ChangeType(rule.ValidationParameters["max"], typeof(int));
}
if (rule.ValidationParameters.ContainsKey("min"))
{
lengthVal.Min = (int)Convert.ChangeType(rule.ValidationParameters["min"], typeof(int));
}
lengthVal.Message = rule.ErrorMessage;
validations.Add(lengthVal);
break;
}
}
}
}
if (validations.Count > 0)
{
if (storeModel != null)
{
storeModel.Validations.AddRange(validations);
}
else
{
modelField.Validations = validations;
}
}
return modelField;
}