为营销人员选择Web表单中的日期输入字段

时间:2014-01-07 01:49:54

标签: c# sitecore web-forms-for-marketers

我正在使用 Sitecore WFFM ,日期字段附带一个dd / mm /YYYY的下拉列表,其中包含我定义的开始日期。如果我想将此用于DOB字段,我希望此下拉列表具有null值而不是1 Jan 2000,因此用户必须选择。 如何强制使用“select”值而不是该字段的表单设计器中定义的默认日期?

1 个答案:

答案 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);
        }
    }
}