【发布时间】:2019-02-04 22:51:00
【问题描述】:
我有一个需要输入 2 个日期的表格。一个必须在另一个之后。我设置了一个自定义验证器来处理这个问题。如果较晚的日期无效,验证器将触发并按预期显示错误消息。如果随后将日期更正为有效日期,则会将其作为“01/01/0001”发布到服务器。更正后的日期不会发送到服务器。
型号:
[Display(Name = "Start")]
public DateTime Start { get; set; }
[Display(Name = "End")]
[CustomTimeRangeEnd(ErrorMessage = "End Date is required and must be a valid date after Start Date")]
public DateTime End { get; set; }
验证器:
public class CustomTimeRangeEndAttribute : ModelAwareValidationAttribute
{
static CustomTimeRangeEndAttribute()
{
Register.Attribute(typeof(CustomTimeRangeEndAttribute));
}
public override bool IsValid(object value, object container)
{
var model = (ICustomTimeRange)container;
if (value == null) return false;
DateTime dt;
var validdt = DateTime.TryParse(value.ToString(), out dt);
if (!validdt) return false;
if (dt < model.Start) return false;
return true;
}
查看:
@Html.LabelFor(x => x.Start, new { @class = "control-label" })<br />
<input type="date" name="Start" id="Start" />
@Html.LabelFor(x => x.End, new { @class = "control-label" })<br />
<input type="date" name="End" id="End" />
【问题讨论】:
-
澄清一下,这两个日期都在最初发布的服务器上?出现验证错误时,HTML 日期输入的名称或 id 属性是否会改变?
-
是的,两者都在初始发布时到达服务器。如果出现错误,name 和 id 属性不会改变。
-
@RossD
it gets posted to the server as "01/01/0001".- 这意味着您的值没有从视图传递到控制器。 -
最好提供控制器操作和
ICustomTimeRange定义,因为仍然缺少一些重现问题的重要信息。据我所知,date输入默认具有yyyy-MM-dd格式,但您使用的是dd/MM/yyyy或MM/dd/yyyy。
标签: c# html asp.net-mvc post asp.net-mvc-5.2