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