我有一个[Range]注释,如下所示:
[Range(0, 100)]
public int AvailabilityGoal { get; set; }
Run Code Online (Sandbox Code Playgroud)
我的网页看起来像这样:
<%=Html.TextBoxFor(u => u.Group.AvailabilityGoal)%>
Run Code Online (Sandbox Code Playgroud)
它应该工作,我只能输入0到100之间的值,但我也希望输入框是可选的,如果输入框为空,用户不应该得到验证错误.这与范围无关,但因为类型是整数.如果用户将其留空,则应使AvailabilityGoal = 0,但我不想强迫用户输入零.
我试过这个,但它(显然)不起作用:
[Range(typeof(int?), null, "100")]
Run Code Online (Sandbox Code Playgroud)
是否可以使用数据注释或其他方式解决此问题?
提前致谢.
鲍比
我一直在使用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; }
使用这两个属性有什么区别?我应该正常使用哪个属性,还是用于不同的任务?
我有一个带注释的基本MVC视图模型,例如:
[Required(ErrorMessage="Your Name Required")]
[Display(Name = "Your Name")]
[DataType(DataType.Text)]
[MaxLength(120, ErrorMessage = "Must be under 120 characters")]
public String YourName { get; set; }
Run Code Online (Sandbox Code Playgroud)
我有一个基于此视图模型的强类型视图.当我在本地运行应用程序时,以下代码生成"您的名称"标签:
@Html.LabelFor(model => model.YourName)
Run Code Online (Sandbox Code Playgroud)
当应用程序部署在带有.NET 4应用程序池的IIS7上时,标签显示"YourName"(没有空格).
这非常古怪,我以前没遇到过这个.有没有人知道可能导致这种情况的原因是什么?
清除缓存,已经从一系列Web客户端测试,结果是相同的.
编辑:
@model MVC.Web.Models.ContactUsModel
<div>
@Html.LabelFor(model => model.YourName)
@Html.EditorFor(model => model.YourName)
</div>
Run Code Online (Sandbox Code Playgroud)
编辑2 正在忽略该字段上的所有注释.还有其他文本类型字段,它们具有相同的问题.这只发生在实时服务器上.实时服务器是IIS 7,已在Plesk 10.2上配置.想知道这是不是因为我使用的是MVC 3 RTM.
编辑3 在同一视图模型中,我有Email属性:
[Required(ErrorMessage = "Your Email Is Required")]
[Display(Name = "Your Email")]
[RegularExpression(@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "Your Email Is Invalid")]
[DataType(DataType.Text)]
public String FromEmail { get; set; }
Run Code Online (Sandbox Code Playgroud)
在视图中使用此属性:
<div>
@Html.LabelFor(model => …Run Code Online (Sandbox Code Playgroud) 我的模型有一个值,它必须在我的模型上的两个其他值的范围内.
例如:
public class RangeValidationSampleModel
{
int Value { get; set; }
int MinValue { get; set; }
int MaxValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当然,我不能将这些Min/MaxValues传递给我的DataAnnotations属性,因为它们必须是常量值.
我确定我需要构建自己的验证属性,但是我没有这么做,也无法理解它应该如何工作.
我已经搜索了大约一个小时,并且已经看到了各种用于构建自定义验证的解决方案,但是使用MVC3不显眼的验证找不到任何解决这个特定问题的方法.
asp.net-mvc data-annotations unobtrusive-validation asp.net-mvc-3
可能重复:
密码验证(正则表达式?)
我正在研究asp.net MVC 3应用程序,我申请了
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
Run Code Online (Sandbox Code Playgroud)
DataAnnotation到我的密码字段.我想确保密码必须至少为6个字符,不超过18个字符,并且必须至少包含一个大写字母,一个小写字母和一个数字.我是否需要添加正则表达式或DataType.password才能完成所有这些操作?
请建议
我在模型类中将属性标记为只读,如下所示:
public class RegisterModel
{
[Display(Name = "User name")]
[ReadOnly(true)]
public string UserName { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
在我看来:
@Html.EditorFor(m => m.UserName)
Run Code Online (Sandbox Code Playgroud)
但是当我运行应用程序时,文本框不是只读的.
我知道我可以在视图中使用html属性使其只读,但我更喜欢这可以在模型类本身中完成.
可以实现吗?
[Phone]属性的默认有效格式是什么?在数据表中,电话栏是navrchar(16)如果我输入电话#1112223333,我得到"字段不是有效的电话号码".如果我输入01112223333,我会收到"值'11112223333'无效."
另外,如何覆盖它?我知道我可以做这样的事情,但这是这种情况下的最佳做法吗?
[RegularExpression(@"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}",ErrorMessage="Invalid Phone Number!")]
Run Code Online (Sandbox Code Playgroud)
相关代码:
[Required]
[Phone]
public string Phone { get; set; }
<div class="editor-field">
@Html.EditorFor(model => model.Phone)
@Html.ValidationMessageFor(model => model.Phone)
</div>
Run Code Online (Sandbox Code Playgroud)
更新 我想当我将手机列从int更改为navrchar时存在映射问题.更新模型是不够的,所以我不得不使用表映射手动更改值.
2019年错误:指定的成员映射无效.'UserDBModel.UserProfile'类型中成员'Phone'的类型'Edm.Int32 [Nullable = False,DefaultValue =]'与'SqlServerCe.nvarchar不兼容[Nullable = False,DefaultValue =,MaxLength = 16,Unicode = True ,"FixedLength = False]'成员'Phone',类型为'UserDBModel.Store.UserProfile'.
有没有办法将视图模型属性作为html端具有不同名称和id值的元素进行反射.
这是我想要实现的主要问题.所以问题的基本介绍如下:
1-我有一个视图模型(作为示例),它为视图侧的过滤操作创建.
public class FilterViewModel
{
public string FilterParameter { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
2-我有一个控制器动作,它是为GETting表格值创建的(这里是过滤器)
public ActionResult Index(FilterViewModel filter)
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
3-我认为用户可以过滤某些数据,并通过表单提交通过查询字符串发送参数.
@using (Html.BeginForm("Index", "Demo", FormMethod.Get))
{
@Html.LabelFor(model => model.FilterParameter)
@Html.EditorFor(model => model.FilterParameter)
<input type="submit" value="Do Filter" />
}
Run Code Online (Sandbox Code Playgroud)
4-我想在渲染视图输出中看到的是
<form action="/Demo" method="get">
<label for="fp">FilterParameter</label>
<input id="fp" name="fp" type="text" />
<input type="submit" value="Do Filter" />
</form>
Run Code Online (Sandbox Code Playgroud)
5-作为解决方案,我想修改我的视图模型,如下所示:
public class FilterViewModel
{
[BindParameter("fp")]
[BindParameter("filter")] // this one extra alias
[BindParameter("param")] //this one extra alias
public string FilterParameter { …Run Code Online (Sandbox Code Playgroud) asp.net-mvc model-binding data-annotations razor asp.net-mvc-5
我DataAnnotations用来指定我的验证规则,默认情况下,这些验证规则在客户端添加,以供jquery验证.
我想使用BootstrapValidator.js,因为我喜欢呈现错误/成功消息的方式.但是,它要求我在客户端重新定义验证规则.可以找到一篇关于BootstrapValidator.js的文章.
有没有办法DataAnnotations在一个地方使用和定义规则,仍然使用BootstrapValidator?
有什么想法吗?
validation asp.net-mvc data-annotations asp.net-mvc-4 twitter-bootstrap
我正在使用ASP.NET MVC 3和DataAnnotations参与一个项目.我们在ViewModels类中有DataAnnotations.
你如何为这些验证编写单元测试?
ViewModel示例:
public class AchievementVM
{
[Required(ErrorMessage = "The title field is required.")]
[StringLength(100, ErrorMessage = "Title must be 100 characters or less.")]
public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
data-annotations ×10
asp.net-mvc ×7
c# ×3
asp.net ×2
validation ×2
attributes ×1
razor ×1
regex ×1
tdd ×1
unit-testing ×1