如果您阅读有关使用数据注释验证器进行验证的本文,则表明您可以使用MetadataType属性将验证属性添加到部分类的属性中.在使用LINM to SQL,Entity Framework或Subsonic等ORM时,可以使用它.然后,您可以使用"automagic"客户端和服务器端验证.它与MVC非常吻合.
但是,我的一位同事使用界面来完成完全相同的结果.它看起来几乎完全相同,并在功能上完成同样的事情.所以不要这样做:
[MetadataType(typeof(MovieMetaData))]
public partial class Movie
{
}
public class MovieMetaData
{
[Required]
public object Title { get; set; }
[Required]
[StringLength(5)]
public object Director { get; set; }
[DisplayName("Date Released")]
[Required]
public object DateReleased { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
他这样做了:
public partial class Movie :IMovie
{
}
public interface IMovie
{
[Required]
object Title { get; set; }
[Required]
[StringLength(5)]
object Director { get; set; }
[DisplayName("Date Released")]
[Required]
object DateReleased { get; …Run Code Online (Sandbox Code Playgroud) validation model-view-controller interface metadatatype data-annotations
将数据验证注释放在模型或视图模型中是最佳做法吗?一种方法优于另一种方法的优点/缺点是什么?
很想知道每个人都在进行验证,我目前正在模型项目中进行.但是我看到有几个人说这不是最好的做法.
我有一个asp.net MVC应用程序.有一个名为File的实体,它有一个名为Name的属性.
using System.ComponentModel.DataAnnotations;
public class File {
...
[RegularExpression(@"([^.]+[.](jpg|jpeg|gif|png|wpf|doc|docx|xls|xlsx ..., ErrorMessage = "Invali File Name"]
public string Name{ get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
有一个RegularExpressionValidator可以检查文件扩展名.有一种快速的方法我可以告诉它忽略扩展的情况而不必将大写变体显式添加到我的验证表达式中吗?我需要这个RegularExpressionValidator用于服务器端和客户端."(?i)"可用于服务器端,但这不适用于客户端
视图模型:
public class MyViewModel
{
[Required, StringLength(50)]
public String SomeProperty { ... }
}
Run Code Online (Sandbox Code Playgroud)
XAML:
<TextBox Text="{Binding SomeProperty}" MaxLength="50" />
Run Code Online (Sandbox Code Playgroud)
有没有办法避免设置TextBox的MaxLength以匹配我的ViewModel(可能会因为它在不同的程序集中而改变)并让它根据StringLength要求自动设置最大长度?
可能重复:
如何获取具有给定属性的属性列表?
我有这样的自定义类
public class ClassWithCustomAttributecs
{
[UseInReporte(Use=true)]
public int F1 { get; set; }
public string F2 { get; set; }
public bool F3 { get; set; }
public string F4 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个自定义属性UseInReporte:
[System.AttributeUsage(System.AttributeTargets.Property ,AllowMultiple = true)]
public class UseInReporte : System.Attribute
{
public bool Use;
public UseInReporte()
{
Use = false;
}
}
Run Code Online (Sandbox Code Playgroud)
不,我想获得所有具有[UseInReporte(Use=true)]如何使用反射做到这一点的属性?
谢谢
我有一个针对.NET 4.0并使用EF 5.0的项目.将目标框架更改为4.5(并更新EF 5.0引用以使用.NET 4.5程序集)后,似乎数据注释不再起作用.例如:
[Table("ApplicationSession", Schema = "Application")]
public class ApplicationSessionEntity
{
[Key, ForeignKey("GenericSession")]
public int GenericSessionID { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
过去工作正常,但现在在运行时,DbContext抛出InvalidOperationException:Unable to determine the principal end of an association....
我可以添加Fluent api调用来解决这个问题(并且确实如此),但是它不能识别该表不在"dbo"模式中.同样,我知道Fluent api可用于解决此问题,但为什么数据注释突然被忽略?
谢谢!
entity-framework data-annotations .net-4.5 entity-framework-5
有人请使用MVC中的数据注释分享他们对最小和最大字符串长度的单独错误消息的实现吗?
它似乎StringLength只允许单个错误消息a MinLength/ MaxLength不生成不显眼的验证标记,因为它们不是IClientValidatable
虽然这似乎是一个非常普遍的要求,但我无法在网上找到实现.
我[EmailAddress]在模型属性上有一个来自.net 4.5 的 DataAnnotation,它返回一个' 电子邮件字段不是有效的电子邮件地址.'验证时,Email属性为空时出错.
虽然这在技术上是正确的,但我希望这个空值只能用[Required]注释捕获.
是否有任何我想要的参数可以传递给[EmailAddress]注释以允许空字符串验证,或者我是否必须回退到使用自定义验证器正则表达式?
我遇到了一个在动态数据Web应用程序中自定义DataAnnotations的场景.这是场景:
[显示(名称= "DispName")]
public string DName {get; set;}
我没有为Display DataAnnotation硬编码Name ="DispName",而是想从DataBase中获取一些值并使其适合于Name属性.喜欢:
[显示(名称= SomeValueFromDB)]
public string DName {get; set;}
有没有办法从数据库中显示Display DataAnnotation的Name属性而不是硬编码它的值?
提前致谢,
Sujith
我有一个Web API项目...我想尊重REST原则,所以我应该只有一个GET方法,只需要一个POST方法......我必须进行搜索,所以我认为这与GET方法匹配,因为在搜索之后我获得了结果并且我在页面中显示...如果我没有找到任何东西我必须创建对象...这个动作是一个POST ...
现在我有一个问题......我必须验证搜索的过滤器,因为过滤器是税码和字母数字代码(6个字符)...我已经完成了客户端验证.现在我应该进行服务器端验证.
直到现在,我们已经使用数据注释来验证请求,但这是一个GET ...所以我的方法有这个签名:
[HttpGet]
public IHttpActionResult GetActivationStatus(string taxCode, string requestCode)
{
if (ModelState.IsValid)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是如何使用Data Annotation验证我的ModelState?
谢谢
data-annotations ×10
validation ×4
c# ×3
asp.net-mvc ×2
.net ×1
.net-4.5 ×1
asp.net ×1
attributes ×1
c#-4.0 ×1
interface ×1
maxlength ×1
metadatatype ×1
reflection ×1
regex ×1
rest ×1
wpf ×1
xaml ×1