ASP.Net MVC TextBoxFor 忽略我的格式

ASP.Net MVC TextBoxFor ignore my format

我创建了一些辅助方法并在其中创建了 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" />

这里发生了什么?

我该如何解决这个问题?

提前致谢。

我终于找到了这个奇怪现象的根源。

当我使用 FluentValidator 并显式调用

时发生了
validator.validate(obj)

当我将它添加到 ModelState 时,ModelState 的 属性 RawValue 数据类型是 DateTime。这把一切都搞砸了。 (如果没有显式调用但将验证器设置为 class 属性 RawValue 数据类型将为字符串)

所以我找到了 2 种方法来解决这个问题。

1st: 只需将验证器设置为 class 属性而不显式调用验证器。

[FluentValidation.Attributes.Validator(typeof(objValidator))]

2:新建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);
        }