我一直在谷歌搜索这个不停的2天,并且找不到一个完整的,可以使用的,完全实现的生成DataAnnotations的t4模板.他们甚至存在吗?
我使用标准t4模板生成POCO.实际的数据库表具有描述一些验证规则的元数据,例如not null,nvarchar(25)等.
所以我想要的是一个t4模板,可以使用我的表并生成带有 DataAnnotations 的POCO ,例如
public class Person
{
[Required]
[StringLength(255)]
public FirstName {get;set}
}
Run Code Online (Sandbox Code Playgroud)
这是一个基本的和基本的要求,当然我不能成为全世界第一个有这个要求的人吗?我不想在这里重新发明轮子.然而,经过几天的高低搜索,我还没有找到它.
这必须是可能的(并且希望必须在某处才可以下载) - 当数据库中已经存在这些注释的元数据时,必须手动输入这些注释是犯罪上的错误.
在MVC的世界里,我有这个视图模型......
public class MyViewModel{
[Required]
public string FirstName{ get; set; } }
Run Code Online (Sandbox Code Playgroud)
......在我看来......这种事情......
<%= Html.ValidationSummary("Please correct the errors and try again.") %>
<%= Html.TextBox("FirstName") %>
<%= Html.ValidationMessage("FirstName", "*") %>
Run Code Online (Sandbox Code Playgroud)
我的问题:如果我提交此表单而不提供名称,我会收到以下消息"FirstName字段是必需的"
好.所以,我去改变我的财产......
[DisplayName("First Name")]
[Required]
public string FirstName{ get; set; }
Run Code Online (Sandbox Code Playgroud)
..现在得到"名字字段是必需的"
到目前为止都很好.
所以现在我想要错误信息显示"名字Blah Blah".如何覆盖默认消息以显示DisplayName +"Blah Blah",而不是用类似的东西注释所有属性
[Required(ErrorMessage = "First Name Blah Blah")]
Run Code Online (Sandbox Code Playgroud)
干杯,
ETFairfax
我最近使用ASP.Net MVC和DataAnnotations,并考虑使用相同的方法进行Forms项目,但我不知道如何去做.
我已经设置了我的属性,但是当我单击"保存"时似乎没有检查它们.
更新:我使用了Steve Sanderson的方法来检查我的类的属性并返回一组错误,如下所示:
try
{
Business b = new Business();
b.Name = "feds";
b.Description = "DFdsS";
b.CategoryID = 1;
b.CountryID = 2;
b.EMail = "SSDF";
var errors = DataAnnotationsValidationRunner.GetErrors(b);
if (errors.Any())
throw new RulesException(errors);
b.Save();
}
catch(Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)
您如何看待这种方法?
我一直在玩MVC2中的数据注释,如果有一个注释来比较2个属性(即密码,确认密码),我很好奇吗?
我为什么不能这样做?
[Required(ErrorMessage = "*")]
[RegularExpression("^[a-zA-Z0-9_]*$", ErrorMessage = Resources.RegistrationModel.UsernameError)]
public string Username { get; set; }
Run Code Online (Sandbox Code Playgroud)
告诉我的错误信息是什么?
属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式.
是否可以使用ASP.NET MVC 2的DataAnnotations只允许字符(无数字),甚至提供允许字符串的白名单?例?
又一个MVC本地化问题......
我正在尝试使用本地化的资源文件本地化ASP.Net MVC 3应用程序,以按照建议在视图中显示文本.
像往常一样,问题是尝试从数据注释本地化默认错误消息时.
我知道你可以在每个属性中指定资源文件和密钥:
[Required(
ErrorMessageResourceType = typeof(CustomResourceManager),
ErrorMessageResourceName = "ResourceKey")]
public string Username { get; set; }
Run Code Online (Sandbox Code Playgroud)
甚至,这是更好和首选,您可以覆盖默认消息,如下所示:ASP.NET MVC中的数据注释的默认资源,因此您可以保留属性,如:
[Required]
public string Username { get; set; }
Run Code Online (Sandbox Code Playgroud)
最后一种方法是我正在遵循的方法,并且它可以工作,但只有当您要覆盖的DataAnnotation具有ONE和ONLY ONE错误消息时,因为它总是查找与自定义资源文件中的属性相同的资源键(例如"Required"需要资源文件中的"RequiredAttribute"条目)
其他属性(如StringLength)具有多个错误消息,具体取决于您使用的可选参数.所以,如果你有一个像这样的模型:
public class Person
{
[Required]
[StringLengthLocalizedAttribute(10, MinimumLength = 5)]
[Display(Name = "User name")]
public string UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
错误消息是" 字段用户名必须是最小长度为5且最大长度为10的字符串. "
如果您将StringLength属性更改为:
[StringLengthLocalizedAttribute(10)]
Run Code Online (Sandbox Code Playgroud)
错误消息更改为" 字段用户名必须是最大长度为10的字符串. "因此,在这种情况下,至少有2个默认错误消息要覆盖,@ kim-tranjan给出的解决方案失败.
我对此的部分解决方案是实现我自己的StringLength属性,如下所示:
public class StringLengthLocalizedAttribute : …Run Code Online (Sandbox Code Playgroud) class SomeModel
{
[Display(Name = "Quantity Required")]
public int Qty { get; set; }
[Display(Name = "Cost per Item")]
public int Cost { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将模型映射到对列表中{ PropertyName, DisplayName },但我已经卡住了.
var properties
= typeof(SomeModel)
.GetProperties()
.Select(p => new
{
p.Name,
p.GetCustomAttributes(typeof(DisplayAttribute),
false).Single().ToString()
}
);
Run Code Online (Sandbox Code Playgroud)
以上不编译,我不确定这是正确的方法,但希望你能看到意图.有什么指针吗?谢谢
我们面临着必需属性本地化的奇怪错误.
我们有以下代码:
public class AnswersGroupViewModel
{
public int IDAnswerGroup { get; set; }
public int IDEvaluator { get; set; }
public List<AnswersViewModel> Answers { get; set; }
}
public class AnswersViewModel
{
public string Text{ get; set; }
[Required(ErrorMessageResourceName = "RequiredMessage", ErrorMessageResourceType = typeof(Resources.Language))]
public int IDAnswer{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
问题是"RequiredMessage"的正确翻译没有从资源文件中获取,尽管它存在(我们在西班牙语和俄语资源文件上都有RequiredMessage).
像Display这样的属性正在工作和被翻译,但似乎是Required属性的问题.
这是一个示例图像:
使用@ Html.ValidationMessage显示错误
在此先感谢您的帮助.
我一直在使用mvc2一段时间,当我需要设置模板时,我使用DataType属性
Run Code Online (Sandbox Code Playgroud)[DataType("DropDown")] public int Field { get; set; }
我看到其他人使用UiHint来实现相同的结果
Run Code Online (Sandbox Code Playgroud)[UiHint("DropDown")] public int Field { get; set; }
使用这两个属性有什么区别?我应该正常使用哪个属性,还是用于不同的任务?
data-annotations ×10
c# ×7
asp.net-mvc ×6
asp.net ×4
validation ×2
.net ×1
c#-3.0 ×1
html-helper ×1
localization ×1
propertyinfo ×1
reflection ×1
resources ×1
winforms ×1