该[Email]属性将被构建到ASP.NET MVC 3中,就像它在期货中一样?它现在可用还是不可用?我想这是一个相当愚蠢的问题,但我花了一些时间谷歌搜索,并没有找到任何正常的答案.
电子邮件正则表达式:
"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$"
Run Code Online (Sandbox Code Playgroud) jQuery Validation使验证电子邮件地址变得简单:
$("someForm").validate({
rules: {
SomeField: {
required: true,
email: true,
remote: {
type: "POST",
url: "CheckEmail"
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
这使得SomeField成为必需,必须格式化为电子邮件地址,并且还执行对CheckEmail操作的远程调用(检查重复项).
我喜欢让事情变得尽可能简单,所以我可以用Data Annotations做很多相同的事情:
public class RegisterModel {
[Required]
[Remote("CheckEmail", "Home", HttpMethod="POST")]
public string SomeField { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ASP.net MVC 3/Data Annotations是否有内置/简单的方法来验证以确保电子邮件地址的格式正确?
如果可能的话,我希望它能产生不引人注目的javascript.
c# unobtrusive-javascript data-annotations unobtrusive-validation asp.net-mvc-3
我的模型字段以下列方式装饰:
[DataType(DataType.Date)]
[Display(Name = "Date of birth")]
public string DateOfBirth { get; set; }
Run Code Online (Sandbox Code Playgroud)
当我想使用以下代码在视图中显示值时:
<%: Html.DisplayFor(m => m.DateOfBirth) %>
Run Code Online (Sandbox Code Playgroud)
问题是日期与其时间值一起显示.我想知道为什么它不考虑DateType属性并且只显示没有时间的日期值.我知道我可以为DateTime创建一个显示模板,但在其他情况下,除了出生日期,我想与日期一起显示时间.如何解决问题?
说我有这样的模特
public class User
{
[Required]
[StringLength(14, ErrorMessage = "Can only be 14 characters long")]
public string UserName;
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个这样的Html帮助器:
@Html.ValidatableEditorFor(m => m.UserName)
Run Code Online (Sandbox Code Playgroud)
这样它就会向jQuery Vaidation插件发出一个正确格式的文本字段,以便能够验证,如下所示:
<input type="text" class="required" maxlength="14" />
Run Code Online (Sandbox Code Playgroud)
根据我的研究,似乎没有办法迭代MetaDataModel中的所有数据注释,以便我可以检查哪一个适用于jQuery验证.
我如何设想它在伪代码中工作:
var tag = new TagBuilder("input");
tag.mergeAttribute("type", "text");
foreach(var attribute in metadata.attributes)
{
CheckForValidatableAttribute(attribute, tag);
}
...
private void CheckForValidatableAttribute(DataAnnotation attribute, TagBuilder tag)
{
switch(attribute.type)
{
case Required:
tag.addClass("required");
break;
case StringLength
tag.mergeAttribute("maxlength", attribute.value)
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能去实现这样的帮助呢?我希望它能够处理数据注释,这样我就不必复制验证文字了.
例如,像TextEditorFor这样的当前Html帮助程序会将可验证的属性附加到其输出字段.它是如何做到的,我如何实现自己的实现?
干杯
我有一个完全本地化的网站,主要是法语/英语/德语.
现在,一切都很顺利,但我确实注意到asp.net MVC的一些错误消息的问题.
我的模型中有一个属性:
[Required]
[LocalizedDisplayName("PublicationDate", NameResourceType = typeof(LocalizationResources.Views.Composer.BaseInfoForm))]
public DateTime PublicationDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
LocalizedDisplayname是DisplayNameAttribute的扩展,它位于Resx文件中以获取正确的翻译
线程CurrentCulture和CurrentCultureUI在fr-FR中,因此消息应该以法语显示(就像我的[Required]属性一样,自动显示"Le champ Publication est requis").
但是在DateTime的情况下,如果我输入的东西不是日期,验证器只返回一个" The value 'asdfasdf' is not valid for Publication."所以:
非常感谢你
有没有办法可以DisplayFormat在视图模型属性上使用该属性来应用DataFormatString社会安全号码或电话号码的格式?我知道我可以用javascript做到这一点,但如果可能的话,我更愿意让模型处理它.
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "???????")]
public string Ssn { get; set; }
Run Code Online (Sandbox Code Playgroud) 我在Visual Studio 2012中遇到涉及System.ComponentModel.DataAnnotations.Schema命名空间的问题.它告诉我,ForeignKeyAttribute无法解析,过去的解决方案是添加下面注释掉的using语句.VS2012无法像VS2010那样解析Schema名称空间.最近的.Net版本中是否有任何变化会导致此问题?如果是这样,我该如何解决它们?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
// using System.ComponentModel.DataAnnotations.Schema;
namespace Data
{
public class AffiliateUser
{
[Key, ForeignKey("User")]
public int UserId { get; set; }
[StringLength(50)]
public string AffiliateUserKey { get; set; }
public Guid ApiKey { get; set; }
public string PasswordHash { get; set; }
public bool IsDeleted { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我正在开发MVC5中的登录视图.
我想在ViewModel级别设置一个DataAnnotation来声明该字段不接受空格.
MVC中是否有数据注释(像[NoSpaces]这样的东西可以用来不允许字符串字段包含"空格"?
model-view-controller asp.net-mvc data-annotations asp.net-mvc-3
我希望能够这样做:
string email = "some@email.com";
bool isValid = IsValidEmail(email);
//returns true
Run Code Online (Sandbox Code Playgroud)
...但是使用Microsoft已经在EmailAddressAttribute中提供的逻辑.
IsValidEmail有数百个好的和坏的实现,当我可以使用微软已经考虑过的东西时,我不想添加自己的.按理说,他们会比我做得更好.
在最近的ASP.Net版本中,我们有System.ComponentModel.DataAnnotations,它为我们提供了优秀的EmailAddressAttribute,它允许我们像这样装饰我们的模型:
public class SomeModel
{
[EmailAddress]
public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这个类是密封的,所以我不能调用EmailAddressAttribute.IsValid()
有没有一种好方法可以利用微软已经做过的事情?在.Net框架中的某个地方是否有一个方法,让我测试字符串对数据注释,我忽略了?
有点像......:
var emailChecker = new DataAnnotationsChecker<EmailAddressAttribute>();
string email = "some@email.com";
bool isValid = emailChecker.IsValid(email);
//returns true
Run Code Online (Sandbox Code Playgroud)
如果您无法想象为什么我会想要这个,请考虑获取一个List并想要检查哪些是有效的电子邮件.
我遇到了一个在动态数据Web应用程序中自定义DataAnnotations的场景.这是场景:
[显示(名称= "DispName")]
public string DName {get; set;}
我没有为Display DataAnnotation硬编码Name ="DispName",而是想从DataBase中获取一些值并使其适合于Name属性.喜欢:
[显示(名称= SomeValueFromDB)]
public string DName {get; set;}
有没有办法从数据库中显示Display DataAnnotation的Name属性而不是硬编码它的值?
提前致谢,
Sujith
data-annotations ×10
asp.net-mvc ×5
c# ×4
.net ×3
attributes ×2
validation ×2
asp.net ×1
datetime ×1
formatting ×1
localization ×1