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;
}
}
我尝试创建第二个 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;
}
}