我正在使用 Sitecore WFFM ,日期字段附带一个dd / mm /YYYY
的下拉列表,其中包含我定义的开始日期。如果我想将此用于DOB字段,我希望此下拉列表具有null
值而不是1 Jan 2000
,因此用户必须选择。
如何强制使用“select”值而不是该字段的表单设计器中定义的默认日期?
答案 0 :(得分:3)
一种方法是通过继承Sitecore.Form.Web.UI.Controls.DateSelector
来创建自定义WFFM字段。
在OnInit
方法中,在每个下拉列表的开头插入空的“select”项:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
month.Items.Insert(0, new ListItem("", ""));
day.Items.Insert(0, new ListItem("", ""));
year.Items.Insert(0, new ListItem("", ""));
SelectedDate = String.Empty;
month.SelectedValue = String.Empty;
day.SelectedValue = String.Empty;
year.SelectedValue = String.Empty;
}
为了确保正确验证,您还需要覆盖Result
属性,并在类本身上设置ValidationProperty
属性。
[ValidationProperty("Value")]
public class CustomDate : DateSelector
{
protected override void OnInit(EventArgs e) { ... } // See above
/// <summary>
/// Gets the value of the date field
/// </summary>
public new string Value
{
get
{
if (month.SelectedIndex > 0 && day.SelectedIndex > 0 && year.SelectedIndex > 0)
return DateUtil.ToIsoDate(new DateTime(DateUtil.IsoDateToDateTime(StartDate).Year + year.SelectedIndex, month.SelectedIndex + 1, day.SelectedIndex + 1).Date);
return String.Empty;
}
}
/// <summary>
/// Retuns the new result
/// </summary>
public override ControlResult Result
{
get
{
return new ControlResult(base.ControlName, Value, null);
}
}
}