我在这里看到了问题,但我无法解决问题。
我希望当用户在表单中插入日期时,过去的日期才会相关。
示例:
用户无法在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; }
感谢。
答案 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)
我建议使用条件语句在控制器中进行验证。我不知道您是否在Create
或Edit
视图,但在您的控制器中,您可以这样验证:
[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)]
因为某些浏览器没有给出完美的结果