文件输入为空时如何将模型状态设置为有效

时间:2019-04-11 04:33:25

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

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

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

当字典 HttpPostedFileBase 也为空时,我希望能够使ModelState有效

2 个答案:

答案 0 :(得分:0)

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

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

ModelState.IsValid将返回false。

从此处: Manually Set ModelState.isValid from Controller

答案 1 :(得分:0)

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

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

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

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

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