如何在 View 中显示ModelState?我具有以下验证代码,但无法在View中显示Modelstate错误。

我的条件是我的行动:

        if (!ModelState.IsValid)
            return BadRequest(ModelState.Values.SelectMany(v => v.Errors).Select(error => error.ErrorMessage));

     else if (ModelState.IsValid)
            {
            if (updatedProduct.ProductSRDate.Value > DateTime.Now)
                ModelState.AddModelError("ProductSRDate", " Date must be current date or in the past.");
            var PrjEditMode = await ProductService.GetProductsbyId(id);
            var editMode = Mapper.Map<ProductDetails>(PrjEditMode);
            return View(editMode);
        }

在 View 中,我的验证摘要为:
@Html.ValidationSummary(false, "", new { @class = "text-danger" })

但是它仅在有可为空的字段时显示Date must be current date or in the past.,它显示`日期必须是当前日期或过去日期。
0 "The value '' is invalid."

最佳答案

您可以使用以下键在 View 中访问ModelState类:

Controller :ModelState.AddModelError("ProductSRDate", "Date must be current date or in the past.");
查看:@Html.ValidationMessage("ProductSRDate")
但是,这是代码逻辑错误,因为如果是ModelState,则会向IsValid添加错误。

if (!ModelState.IsValid || updatedProduct.ProductSRDate.Value > DateTime.Now)
{
    if (updatedProduct.ProductSRDate.Value > DateTime.Now)
    {
        ModelState.AddModelError("ProductSRDate", " Date must be current date or in the past.");
    }
    //return BadRequest(ModelState.Values.SelectMany(v => v.Errors).Select(error => error.ErrorMessage));
    return View(editMode); // You should return a view and handle Invalid ModelState in view.
}
else
{
    var PrjEditMode = await ProductService.GetProductsbyId(id);
    var editMode = Mapper.Map<ProductDetails>(PrjEditMode);
    return View(editMode);
}

10-02 01:57
查看更多