mvc 5过去验证日期

时间:2016-03-02 20:28:05

标签: c# html asp.net asp.net-mvc asp.net-mvc-5

我在这里看到了问题,但我无法解决问题。

我希望当用户在表单中插入日期时,过去的日期才会相关。

示例:

用户无法在02/03/2016之后插入日期。

我的模特:

FragmentC

我的观点:

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
[Display(Name = "Date")]
[Required(ErrorMessage = "Date is mandatory")]
public DateTime created_date { get; set; }

感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用void choice_4(char str[]) { int characters; cout << "How many characters from the end of the string do you want to display? "; cin >> characters; if (str[characters] != '\0') cout<<str.Substring(str.length - characters,characters) } 日期类型作为示例:

HTML 5

https://jsfiddle.net/nsvno84t/1/

使用Razor执行此操作,它将为您提供今天的日期:

<input type="date" max="2016-03-02">

但是,您可能需要确定用户/服务器日期时间设置,因为这适用于英国格式(在您的情况下,<input type="date" max='@DateTime.Now.ToString("dd/MM/yyyy")'> 之类的内容可能更好。)

您还应该使用@DateTime.Now.ToString("yyyy-MM-dd")在您的MVC代码中对服务器和客户端进行验证。

ValidationAttribute

然后在模型上使用新的public class RestrictedDate : ValidationAttribute { public override bool IsValid(object date) { DateTime date = (DateTime)date; return date < DateTime.Now; } } 属性:

RestrictedDate

作为补充说明,您可能还需要考虑将public class YourModel { [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)] [Display(Name = "Date")] [Required(ErrorMessage = "Date is mandatory")] [RestrictedDate] public DateTime created_date { get; set; } } 更改为created_date以符合CreatedDate命名约定。

答案 1 :(得分:0)

我建议使用条件语句在控制器中进行验证。我不知道您是否在CreateEdit视图,但在您的控制器中,您可以这样验证:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID, created_date" /* and whatever else you have in your model*/)] YourModel yourModel)

if(ModelState.IsValid)
{
    if (yourModel.created_date > DateTime.Today)
    {
        ModelState.AddModelError("created_date", "Date cannot be set to future date!");
        return View(yourModel);
    }

    return View(yourModel);
}

但这是对服务器的验证..所以我也建议将该验证与@Darren Davies在答案中给出的客户端验证相结合..

答案 2 :(得分:0)

首先你必须改变

[DisplayFormat(DataFormatString =“{0:dd-MM-yyyy}”,ApplyFormatInEditMode = true)]

要 [DisplayFormat(DataFormatString =“{0:yyyy-MM-dd}”,ApplyFormatInEditMode = true)]

因为某些浏览器没有给出完美的结果