我有ValidationAttribute像:
public class Username : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value == null)
return false;
return RegExp.Validate(RegExpLib.Username,value.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
..并使用它像这样:
public class AccountSignIn
{
[Username(ErrorMessageResourceName ="txtUsername",ErrorMessageResourceType=typeof(SignIn))]
public string Username { get; set; }
public string Password { get; set; }
public bool RememberMe { get; set; }
public string ReturnUrl { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
SignIn是App_GlobalResources的资源文件,"txtUsername" - 是资源文件中的字符串名称.
问题:未显示错误消息.
问题:如果网站上的语言很少,如何设置错误消息.
另一个信息:
我可以SignIn.txtUsername从Views或项目中的任何文件访问.来自控制器
ModelState.AddModelError("Username", Resources.SignIn.txtUsername);
Run Code Online (Sandbox Code Playgroud)
工作正常..我可以在ValidationAttribute内部分配ErrorMessage,但在第二次验证后得到错误尝试...如果我这样检查 -
if(ErrorMessage != Resources.SignIn.txtUsername)
ErrorMessage = Resources.SignIn.txtUsername;
Run Code Online (Sandbox Code Playgroud)
切换到另一种语言后出错 - …
我有Web API的奇怪行为,.Net 4.5.2.如果可选字符串参数为null,则ModelState没有错误.如果它不为空且不为空,则不会再出现错误.但如果它只是一个空字符串我有模型状态错误.
为什么我得到它以及如何禁用它?
假设应用程序服务localhost:82我有这些结果:
Url: http://localhost:82/
Response: "null"
Url: http://localhost:82/?q=1
Response: "1"
Url: http://localhost:82/?q=
Response: {
"Message": "The request is invalid.",
"ModelState": {
"q.String": [
"A value is required but was not present in the request."
]
}
}
Run Code Online (Sandbox Code Playgroud)
测试控制器和配置如下.在VS2013中,这被简化为"WebApi"的默认"Asp.net Web应用程序".
namespace Web.Api.Test.Controllers
{
using System.Web.Http;
[Route]
public class HomeController : ApiController
{
[Route]
[HttpGet]
public IHttpActionResult Search(string q = default(string))
{
return this.ModelState.IsValid
? this.Ok(q ?? "null")
: (IHttpActionResult)this.BadRequest(this.ModelState);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Startup.cs是:
using Microsoft.Owin;
using …Run Code Online (Sandbox Code Playgroud) 我正在使用System.ComponeneModel.DataAnnotations属性,例如Required和StringLength.是否可以全局本地化其错误消息?
我知道我能做到这一点
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))]
Run Code Online (Sandbox Code Playgroud)
但到处都这样,我使用必需的属性将是疯狂的.另外我想避免像这样的东西:
public class LocalizedRequiredAttribute : RequiredAttribute {
public LocalizedRequiredAttribute()
: base() {
ErrorMessageResourceName = "Required";
ErrorMessageResourceType = typeof(Resources.Validation);
}
}
Run Code Online (Sandbox Code Playgroud)
(但如果没有其他办法,我会满足于此)
validation attributes localization data-annotations asp.net-mvc-3