ControlBuilder CreatePropertyBuilder (string propName, TemplateParser parser, IDictionary atts)
{
int idx;
string propertyName;
if ((idx = propName.IndexOf (':')) >= 0)
propertyName = propName.Substring (idx + 1);
else
propertyName = propName;
PropertyInfo prop = type.GetProperty (propertyName, FlagsNoCase);
if (prop == null) {
string msg = String.Format ("Property {0} not found in type {1}", propertyName, type);
throw new HttpException (msg);
}
Type propType = prop.PropertyType;
ControlBuilder builder = null;
if (typeof (ICollection).IsAssignableFrom (propType)) {
builder = new CollectionBuilder ();
} else if (typeof (ITemplate).IsAssignableFrom (propType)) {
builder = new TemplateBuilder (prop);
} else if (typeof (string) == propType) {
builder = new StringPropertyBuilder (prop.Name);
} else {
builder = CreateBuilderFromType (parser, parentBuilder, propType, prop.Name,
null, atts, line, fileName);
builder.isProperty = true;
builder.isPropertyWritable = prop.CanWrite;
if (idx >= 0)
builder.originalTagName = propName;
return builder;
}
builder.Init (parser, this, null, prop.Name, null, atts);
builder.fileName = fileName;
builder.line = line;
builder.isProperty = true;
builder.isPropertyWritable = prop.CanWrite;
if (idx >= 0)
builder.originalTagName = propName;
return builder;
}