【发布时间】:2021-04-02 15:20:07
【问题描述】:
我得到一个 ModelState.IsValid,其日期类似于 2021 年 4 月 31 日(4 月只有 30 天),然后是我的 Convert.ToDateTime(form["StatusRangeFrom"]);抛出错误。
我需要一个空日期或有效日期。如何检查日期是否无效并将 ModelState 设置为无效,并返回带有正确的无效日期消息的视图?
型号:
[Display(Name ="Date From")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public Nullable<System.DateTime> StatusRangeFrom { get; set; }
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Update(IFormCollection form)
{
UserPreferences userPreferences = await _conn.UserPreferences.FirstOrDefaultAsync(c => c.AccessID == Convert.ToInt32(form["AccessID"]));
if (ModelState.IsValid)
{
if (form["StatusRangeFrom"].ToString() != "")
{
userPreferences.StatusRangeFrom = Convert.ToDateTime(form["StatusRangeFrom"]); // throws error on bad date
}
else
{
userPreferences.StatusRangeFrom = null;
}
await _conn.SaveChangesAsync();
查看:
<div class="form-group">
<label asp-for="StatusRangeFrom" class="control-label"></label>
<input type="date" asp-for="StatusRangeFrom" class="form-control" />
<span asp-validation-for="StatusRangeFrom" class="text-danger"></span>
</div>
【问题讨论】:
-
嗨,我试过你的代码,它工作正常。它不允许我到达显示无效日期错误的控制器。你能分享你的整个视图代码吗?
-
错误是:Convert.ToDateTime(form["StatusRangeFrom"]); 2021 年 4 月 31 日这样的糟糕日期,因为 4 月只有 30 天。
-
嗨@MatthewCox,回复是否解决了问题或者这个帖子有什么更新?如果答案解决了问题,请接受 - 请参阅What should I do when someone answers my question。如果它不起作用,您还可以创建自定义验证属性来验证数据,请参阅:Custom Model Validation 和 Custom attributes。
标签: asp.net asp.net-mvc asp.net-core asp.net-core-3.1