据我所知,System.ComponentModel.DataAnnotations.DataTypeAttribute不适用于MVC v1中的模型验证.例如,
public class Model
{
[DataType("EmailAddress")]
public string Email {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,不会在MVC v1中验证Email属性.它在MVC v2中运行吗?
鉴于以下课程:
using System.ComponentModel.DataAnnotations;
public class Book{
public Contact PrimaryContact{get; set;}
public Contact SecondaryContact{get; set;}
[Required(ErrorMessage="Book name is required")]
public string Name{get; set;}
}
public class Contact{
[Required(ErrorMessage="Name is required")]
public string Name{get; set;}
}
Run Code Online (Sandbox Code Playgroud)
有没有干净的方式我可以给每个实例的不同错误信息Contact中Book使用DataAnnotations?例如,如果PrimaryContact实例中缺少名称,则错误将显示为"需要主要联系人姓名".
我目前的解决方案是创建一个验证服务,检查模型状态是否存在字段错误,然后删除所述错误并使用我喜欢的特定语言将其添加回来.
我在Web API Post操作上收到以下VM
public class ViewModel
{
public string Name { get; set; }
[Required]
public int? Street { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我发帖时,我收到以下错误:
"ViewModel"类型的媒体"街道"无效.标记为[必需]的值类型属性也必须标记为[DataMember(IsRequired = true)],以便根据需要进行识别.考虑使用[DataContract]归因声明类型,使用[DataMember(IsRequired = true)]归因属性.
似乎错误是明确的,所以我只想完全确定当你有一个具有必需的可空属性的类时,需要使用[DataContract]和[DataMember]属性.
有没有办法避免在Web API中使用这些属性?
我想通过正则表达式验证器截取表单字段中的"<"字符.我将分三个步骤描述问题:
第1步:当我尝试提交一个包含"<"字符的字段的表单时,我得到了"潜在危险请求..." - 正如ASP.NET中预期的那样.
第2步:为了避免ASP.NET的RequestValidation,我使用"[ValidateInput(false)]"在控制器中修饰我的Update方法.
它按预期工作 - 现在我可以毫无错误地发布"<"字符.
第3步:我将xVal与DataAnnotations一起使用.例如,[Required]或[StringLength(255)]按预期工作.
但是当我使用时:[RegularExpression("^ [^ <>]*$",ErrorMessage ="不允许使用特殊字符.")],我再次收到"潜在的dangeros请求..."错误,尽管[ValidateInput] (假)]指令.
发生了什么?有没有更简单的正则表达式验证方法,但是[ValidateInput(false)]到位了吗?当然,我想在模型中使用验证码,而不是在控制器中.
我想知道是否有一种方法可以在没有MVC网站的情况下使用ASP.Net的数据注释.
我的例子是我有一个曾经创建过的类需要验证,否则会抛出错误.我喜欢数据注释方法,而不是initaliser发出的一堆if块.
有没有办法让这个工作?
我以为它会是这样的:
有任何想法吗?我必须承认我没有将MVC框架添加到我的项目中,因为我希望我可以使用数据注释类System.ComponentModel.DataValidation
为了保持我的模型验证干净,我想实现我自己的验证属性,比如PhoneNumberAttribute和EmailAttribute.其中一些可以有利地实现为继承的简单类RegularExpressionAttribute.
但是,我注意到这样做会破坏这些属性的客户端验证.我假设有某种类型的绑定在某处失败.
我能做些什么来让客户端验证工作?
代码示例:
public sealed class MailAddressAttribute : RegularExpressionAttribute
{
public MailAddressAttribute()
: base(@"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$")
{
}
}
Run Code Online (Sandbox Code Playgroud) regex asp.net asp.net-mvc client-side-validation data-annotations
对于一个属性[Required]和可空的属性意味着什么?(下面的例子)似乎如果它[Required]不可能null(没有价值),如果它能够是null它不可能是[Required].
[Required]
public DateTime? OrderDate { get; set; }
Run Code Online (Sandbox Code Playgroud) 我想利用Validator.TryValidateValue()但不了解机制.说,我有以下内容:
public class User {
[Required(AllowEmptyStrings = false)]
[StringLength(6)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和方法:
public void CreateUser(string name) {...}
Run Code Online (Sandbox Code Playgroud)
我的验证码是:
ValidationAttribute[] attrs = bit of reflection here to populate from User class
var ctx = new ValidationContext(name, null, null);
var errors = new List<ValidationResult>();
bool valid = Validator.TryValidateValue(name, ctx, errors, attrs);
Run Code Online (Sandbox Code Playgroud)
它工作正常,直到值name是null.我ArgumentNullException在实例化时得到ValidationContext并且不明白为什么.TryValidateValue()还要求非空上下文.我有一个值和一个要验证的属性列表.这是ValidationContext为了什么?
我有以下代码:
[DisplayName("58.Date and hour of birth")]
[DataType(DataType.DateTime, ErrorMessage = "Please enter a valid date in the format dd/mm/yyyy hh:mm")]
[Range(typeof(DateTime), "1/1/2011", "1/1/2016")]
[RequiredToClose]
public object V_58 { get; set; }
Run Code Online (Sandbox Code Playgroud)
我想强制包含时间(格式为hh:mm)而不仅仅是日期.此代码将1/1/2011视为有效,因为它不包含小时,有关如何表达正确格式的任何线索?(dd/mm/yyyy hh:mm)
我RangeValidator在我的模型中有一个属性,只允许0到100之间的整数.我有一个部分视图,显示一个表单,通过jQuery UI对话框更新属性.我查看了源代码,可以确认正确生成了数据注释属性.但是,验证无法正常工作.它确实执行某种验证,但它没有使用我设置的范围.值1,10和100不会产生错误.任何其他单个或两个数字值都会产生错误.但是,如果我用零填充,所有小于100的值都可以.
模型:
public class MyModel
{
...
[Required(ErrorMessage = "{0} is required")]
[Range(typeof(int), "0", "100",
ErrorMessage = "{0} can only be between {1} and {2}")]
public int Percentage { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
局部视图:
@model MyApp.Models.Partials.MyModel
<div id="myDialog" class="editModal" title="Update Percentage">
@using (Ajax.BeginForm("UpdatePercentage", "MyController",
new AjaxOptions() { HttpMethod = "Post",
OnSuccess = "onUpdateSuccess" },
new { name = "myForm" }))
{
@Html.ValidationSummary(null, new { style = "width:auto;max-width:22em;
float:left;clear:both;" })
<div style="width:auto;float:left;clear:both;">
<div style="width:10em;float: left;text-align:right;clear:left;">
@Html.Label("Percentage:")
</div> …Run Code Online (Sandbox Code Playgroud) asp.net-mvc jquery-ui asp.net-mvc-validation data-annotations asp.net-mvc-3
data-annotations ×10
asp.net-mvc ×9
c# ×4
validation ×4
.net ×1
.net-4.0 ×1
annotations ×1
asp.net ×1
datetime ×1
email ×1
jquery-ui ×1
regex ×1
xval ×1