e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
69 lines
2.7 KiB
C#
69 lines
2.7 KiB
C#
namespace System.Web.DynamicData {
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Web.UI.WebControls;
|
|
using System.Web.Hosting;
|
|
|
|
// This FieldTemplateFactory is used for the simple cases where the user doesn't have
|
|
// a FieldTemplate directory but wants to get basic validation logic. In a sense
|
|
// it is a smarter version of a BoundField
|
|
internal class SimpleFieldTemplateFactory : FieldTemplateFactory {
|
|
private static bool? _directoryExists;
|
|
|
|
public SimpleFieldTemplateFactory()
|
|
: this(HostingEnvironment.VirtualPathProvider) {
|
|
}
|
|
|
|
internal SimpleFieldTemplateFactory(VirtualPathProvider vpp)
|
|
: base(vpp) {
|
|
VirtualPathProvider = vpp;
|
|
}
|
|
|
|
internal VirtualPathProvider VirtualPathProvider {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
protected virtual bool DirectoryExists {
|
|
get {
|
|
if (!_directoryExists.HasValue) {
|
|
// This is expensive so cache it.
|
|
_directoryExists = VirtualPathProvider.DirectoryExists(TemplateFolderVirtualPath);
|
|
}
|
|
return _directoryExists.Value;
|
|
}
|
|
}
|
|
|
|
public override IFieldTemplate CreateFieldTemplate(MetaColumn column, DataBoundControlMode mode, string uiHint) {
|
|
// Call Preprocess mode so that we do set the right mode base on the the column's attributes
|
|
mode = PreprocessMode(column, mode);
|
|
bool readOnly = (mode == DataBoundControlMode.ReadOnly);
|
|
// If the folder doesn't exist use the fallback
|
|
if (!DirectoryExists) {
|
|
return CreateFieldTemplate(readOnly, column);
|
|
}
|
|
|
|
// Always see check if the base found anything first then fall back to the simple field template
|
|
IFieldTemplate fieldTemplate = base.CreateFieldTemplate(column, mode, uiHint);
|
|
|
|
// If there was no field template found and the user specified a uiHint then use the default behavior
|
|
if (!String.IsNullOrEmpty(uiHint)) {
|
|
return fieldTemplate;
|
|
}
|
|
|
|
return fieldTemplate ?? CreateFieldTemplate(readOnly, column);
|
|
}
|
|
|
|
private IFieldTemplate CreateFieldTemplate(bool readOnly, MetaColumn column) {
|
|
// By default we'll support checkbox fields for boolean and a textbox for
|
|
// everything else
|
|
if (column.ColumnType == typeof(bool)) {
|
|
return SimpleFieldTemplateUserControl.CreateBooleanTemplate(readOnly);
|
|
}
|
|
return SimpleFieldTemplateUserControl.CreateTextTemplate(column, readOnly);
|
|
}
|
|
}
|
|
}
|