Umbraco 表单 DateTimePicker

Umbraco Forms DateTimePicker

我尝试创建第二个 DatePicker,但它也允许选择时间。

我的FieldType.DateTimePicker是

@model Umbraco.Forms.Mvc.Models.FieldViewModel
@{
    string val = string.Empty;
    if (Model.ValueAsObject != null && Model.ValueAsObject != "")
    {
        DateTime d;
        d = (DateTime)Model.ValueAsObject;
        val = d.ToShortDateString();
    }
}
<input type="text" name="@Model.Name" id="@Model.Id" class="datepickerfield" value="@val"
       @{if (Model.Mandatory)
       {
           <text> data-val="true" data-val-required="@Model.RequiredErrorMessage" </text>
       }}
/>

文件放在Partials/Forms/Fieldtypes下。

我也有一个DateTimePicker.csclass

namespace FALCO_CLIENT.App_Plugins.UmbracoForms
{
    public class DateTimePicker : Umbraco.Forms.Core.FieldType
    {
        [Umbraco.Forms.Core.Attributes.Setting("ValueAsObject", description = "DateTimePicker", view = "DateTimePicker")]
        public DateTime ValueAsObject { get; set; }

        public DateTimePicker() {
            //Provider
            this.Id = new Guid("D6A2C406-CF89-11DE-B075-66B155D89593 ");
            this.Name = "DateTimePicker";
            this.Description = "Renders a html input";
            this.Icon = "icon-autofill";
            this.DataType = FieldDataType.DateTime;
            this.SortOrder = 10;
        }


    }
}

我有一个 class 的小视图 (DateTimePicker.html):

<input tabindex="-1" type="text" /> <button class="btn"><i class="icon icon-calendar"></i></button>

在 Umbraco Forms 中,我确实可以选择 "pick" DateTimePicker,但它只会生成一个我可以写入的文本字段。

我做错了什么?

作为后续问题:我在哪里设置 DatePicker 以允许时间?我想我会在 umbraco.forms.js 做,但我找不到正确的地方。

使用 dotPeek,我能够看到原始 DatePicker 字段类型引用了您的实现中缺少的部分视图:

public class DatePicker : FieldType
  {
    public override bool SupportsRegex
    {
      get
      {
        return false;
      }
    }

    public DatePicker()
    {
      this.Id = new Guid("F8B4C3B8-AF28-11DE-9DD8-EF5956D89593");
      this.Name = "Date";
      this.Description = "Renders a date picker";
      this.Icon = "icon-calendar";
      this.DataType = FieldDataType.DateTime;
      this.Category = "Simple";
      this.SortOrder = 30;
      this.FieldTypeViewName = "FieldType.DatePicker.cshtml";
    }

    public override IEnumerable<string> RequiredPartialViews(Field field)
    {
      return (IEnumerable<string>) new string[1]
      {
        "~/Views/Partials/Forms/DatePicker.cshtml"
      };
    }

    public virtual IEnumerable<object> ProcessValue(IEnumerable<object> postedValues)
    {
      return DatePicker.ProcessFieldValues(postedValues);
    }

    public override IEnumerable<object> ConvertToRecord(Field field, IEnumerable<object> postedValues, HttpContextBase context)
    {
      return DatePicker.ProcessFieldValues(postedValues);
    }

    private static IEnumerable<object> ProcessFieldValues(IEnumerable<object> postedValues)
    {
      List<object> objectList = new List<object>();
      postedValues = (IEnumerable<object>) postedValues.ToArray<object>();
      if (!postedValues.Any<object>())
        return (IEnumerable<object>) objectList;
      DateTime result;
      if (DateTime.TryParse(postedValues.First<object>().ToString(), out result))
        objectList.Add((object) result);
      return (IEnumerable<object>) objectList;
    }
  }