【问题标题】:How to set model state to valid when file input gets null当文件输入为空时如何将模型状态设置为有效
【发布时间】:2019-04-11 04:33:24
【问题描述】:

当我尝试创建新记录而不选择任何文件时,它给了我 从类型“System.String”到类型“System.Web.HttpPostedFileBase”的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换错误。我想创建记录,无论是否从用户中选择文件。 if HttpPostedFileBase[] null 模型状态应该是有效的。我检查了模型中的 HttpPostedFileBase 也没有必需的验证。

[HttpPost]        
        public ActionResult NewTheme(ThemeModel themeModel, ColorItem colorItem, ImageItem imageItem, Dictionary<string, HttpPostedFileBase[]> selectedImageList)
        {
            try
            {               
                if (ModelState.IsValid)
                {
                }
              }
         }

我希望当 Dictionary HttpPostedFileBase 也变为 null 时 ModelState 也有效

【问题讨论】:

  • 我们如何重现这个?
  • @John 问题是模型状态在我不选择文件输入时无效,然后 DIctionary HttpPostedFileBase [] 为空。我希望能够在 httppostedfilebase 也为 null 时对有效状态进行建模
  • 我们能看到模型吗?
  • 你能展示你的模型吗?
  • 请分享您发送的请求。

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


【解决方案1】:

您不能直接设置ModelState.IsValid,因为它是一个派生属性,只检查模型错误集合。但是,您可以添加自己的模型错误,例如:

ModelState.AddModelError("selectedImageList", "File is mandatory");

ModelState.IsValid 将返回 false。

从这里: Manually Set ModelState.isValid from Controller

【讨论】:

  • 请不要重复答案。投票以将问题关闭为重复。
【解决方案2】:

ModelState.IsValid 是每个字段验证的聚合。您可以单独控制每个字段的有效性。

可以使用以下两种方法将字段设置为有效

ModelState.ClearValidationState("Password");
ModelState.MarkFieldValid("Password");

需要同时使用这两个,因为第二个没有第一个,它会给出一个错误,指出状态已经被标记。

将字段设置为无效,只需使用 ModelState.AddModelError() 方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多