如何在Asp.net Core 2中使用jQuery获取已翻译的ModelState错误消息?
我正在尝试验证Asp.net Core 2.0应用程序中的HTML表单,使用和,正如文档中强烈建议的那样。我还有一些自定义Javascript来在通知窗口中显示错误消息 我有一个这样的模型:如何在Asp.net Core 2中使用jQuery获取已翻译的ModelState错误消息?,asp.net,asp.net-mvc,validation,asp.net-core,asp.net-core-mvc,Asp.net,Asp.net Mvc,Validation,Asp.net Core,Asp.net Core Mvc,我正在尝试验证Asp.net Core 2.0应用程序中的HTML表单,使用和,正如文档中强烈建议的那样。我还有一些自定义Javascript来在通知窗口中显示错误消息 我有一个这样的模型: 类模型 { [必需(ErrorMessage=“必需”)] [显示(Name=“电子邮件”)] [电子邮件地址(ErrorMessage=“ValidEmail”)] 公共字符串电子邮件{get;set;} } 在多次尝试之后,我让Asp.net发出一个输入标记,准备验证,并显示正确本地化的错误消息:
类模型
{
[必需(ErrorMessage=“必需”)]
[显示(Name=“电子邮件”)]
[电子邮件地址(ErrorMessage=“ValidEmail”)]
公共字符串电子邮件{get;set;}
}
在多次尝试之后,我让Asp.net发出一个输入
标记,准备验证,并显示正确本地化的错误消息:
在提交表单之前,我已设法在客户端进行验证。jQuery验证正确地检测到一个空字段,我可以使用Javascript显示来自datavalrequired
的消息。为了完整性起见,我有这样的方法来处理消息:
函数onFormValidationFailed(e,args:JQueryValidation.Validator){
ErrorManager.clearErrors();
for(args.errorList中的变量错误){
ErrorManager.addError(args.errorList[error].message);
}
}
$(“表格”)
.on(“无效的form.validate”,onFormValidationFailed);
但是,诸如test@example
被客户端验证接受,因此提交表单。然后,Asp.net模型验证会捕获该错误。在我的操作中,我可以看到this.ModelState.IsValid
确实是false
,正如您在上面看到的,该字段被正确识别为类输入验证错误
错误
我的问题是,我不知道如何获取相关的错误消息来显示它
我试图在加载页面时调用$(“form”).validate()
,尝试触发验证,但没有收到任何错误消息。(或至少未触发无效表单。验证事件。)
作为一种回退解决方案,我尝试使用
让Asp.net将错误消息注入到可以通过Javascript获取的地方。但这很快就变成了一条死胡同,因为消息没有本地化
- 瓦利德梅尔
事实上,我在服务器端进行了检查,ModelState
集合不包含本地化消息
有人能帮我找到一个解决方案吗?当我从带有无效模型状态的服务器返回时,我可以通过Javascript获得相关的本地化数据注释错误消息,以便向用户显示它们?(或者建议更好的做法?)
我找到了我的问题的答案,虽然有点尴尬,但我在这里分享它,以防其他人发现自己处于类似的情况
实际问题
事实证明,我正在编写的代码与上面描述的不完全一样,但我没有注意到这一点,直到我尝试创建一个精简版本来进行复制
这个模型看起来很像这样:
类模型:ModelData
{
}
类模型数据
{
[必需(ErrorMessage=“必需”)]
[显示(Name=“电子邮件”)]
[电子邮件地址(ErrorMessage=“ValidEmail”)]
公共字符串电子邮件{get;set;}
}
视图的代码如下所示:
@model MyApp.model
控制器有两种类似的方法:
[HttpGet]
公共IActionResult编辑()
{
返回视图(新模型());
}
[HttpPost]
公共IActionResult编辑(模型数据)
{
if(ModelState.IsValid)
{
数据=_service.Save(数据);
}
var模型=新模型
{
Email=data.Email
};
返回视图(模型);
}
我的resx
文件名为Model.resx
根本原因
我错过的是模型中的继承
一旦我注意到,一切都有意义:
- 构建视图时,类型为
model
的模型在model.resx
- 但是,在操作中进行验证时,验证的类型是no
ModelData
,资源管理器找不到该类型的翻译,因为没有ModelData.resx
修复
我所做的是解决我的问题。我的模型现在看起来像这样:
类模型
{
公共模型数据{get;set;}
}
这样的观点:
@model MyApp.model
并将所有相关翻译移动到ModelData.resx
。由于ModelData
是我正在为控制器操作构建和验证的input
s类型,因此资源总是得到正确处理
我找到了我的问题的答案,虽然有点尴尬,但我在这里分享它,以防其他人发现自己处于类似的情况
实际问题
事实证明,我正在编写的代码与上面描述的不完全一样,但我没有注意到这一点,直到我尝试创建一个精简版本来进行复制
这个模型看起来很像这样:
类模型:ModelData
{
}
类模型数据
{
[必需(ErrorMessage=“必需”)]
[显示(Name=“电子邮件”)]
[电子邮件地址(ErrorMessage=“ValidEmail”)]
公共字符串电子邮件{get;set;}
}
视图的代码如下所示:
@model MyApp.model
控制器有两种类似的方法:
[HttpGet]
公共IActionResult编辑()
{
返回视图(新模型());
}
[HttpPost]
公共IActionResult编辑(模型数据)
{
if(ModelState.IsValid)
{
数据=_service.Save(数据);
}
var模型=新模型
{
Email=data.Email
};
返回视图(模型);
}
我的resx
文件名为Model.resx
根本原因
我错过的是模型中的继承
一旦我注意到,一切都让森