我创建了一些辅助方法并在其中创建TextBoxFor。
input.AppendLine(html.TextBoxFor(expression, format, attributes).ToString());
我的格式为“{0:dd / MM / yyyy}”。它的工作完全正常并呈现为
<input class="form-control req" data-val="true" data-val-date="The field detr must be a date." id="detr" name="detr" type="text" value="25/05/2558" />
但是当ModelState在此字段上出错时,TextBoxFor完全忽略了我的格式并呈现为
<input class="input-validation-error form-control req" data-val="true" data-val-date="The field detr must be a date." id="detr" name="detr" type="text" value="28/5/2558 0:00:00" />
这里发生了什么?
我该如何解决这个问题?
提前谢谢。
答案 0 :(得分:0)
我终于找到了这种奇怪现象的来源。
当我使用FluentValidator并明确调用
时会发生这种情况validator.validate(obj)
当我将它添加到ModelState中时,ModelState的属性RawValue数据类型是DateTime。一切都搞砸了。 (如果没有显式调用,但将验证器设置为类属性RawValue数据类型将为字符串)
所以我找到了两种方法来解决这个问题。
1st:只需将validator设置为class属性,而不是显式调用验证器。
[FluentValidation.Attributes.Validator(typeof(objValidator))]
第二步:创建新的ModelState并手动添加模型错误。
var _validator = new ObjValidator();
var results = _validator.Validate(dto);
ModelStateDictionary modelStateDicts = new ModelStateDictionary();
foreach (KeyValuePair<string, ModelState> kv in ModelState.Where(x => results.Errors.Count(y => y.PropertyName == x.Key) > 0))
{
modelStateDicts.AddModelError(kv.Key, results.Errors.FirstOrDefault(x=>x.PropertyName == kv.Key).ErrorMessage);
}