说我的模型中有这个属性:
[DisplayName("test")]
[Required(ErrorMessage = "required")]
public DateTime? SomeDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
当您输入"asdf"时Html.TextBoxFor(model => model.SomeDate),您会收到验证错误消息"值'asdf'对测试无效.".
你如何修改那条消息?ASP.NET MVC被忽略了[DataType(DataType.DateTime, ErrorMessage = 'some other message')]
我在MVC4中使用数据注释进行模型验证,并且我当前正在使用StringLengthAttribute但是我不想指定最大值(当前设置为50),但是DO想要指定最小字符串长度值.
有没有办法只指定最小长度?也许我可以使用另一个属性?
我目前的代码是:
[Required]
[DataType(DataType.Password)]
[Display(Name = "Confirm New Password")]
[StringLength(50, MinimumLength = 7)]
[CompareAttribute("NewPassword", ErrorMessage = "The New Password and Confirm New Password fields did not match.")]
public string ConfirmNewPassword { get; set; }
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.
asp.net-mvc minimum string-length data-annotations asp.net-mvc-4
我在ASP.NET MVC 2中广泛使用Data Annotation验证.这个新功能节省了大量时间,因为我现在能够在一个地方定义客户端验证和服务器端验证.然而,当我做一些详细的测试时,我意识到如果我单独依赖Data Annotation验证,那么很容易绕过服务器端验证.例如,如果我通过使用[Required]属性注释属性来定义必需字段并在表单中放置该必填字段的文本框,则用户可以简单地从DOM中删除文本框(可以通过Firebug轻松完成)现在,在Controller内的ModelBinding期间,不会在该属性上触发数据注释验证.为了确保触发"必需"验证,我可以在ModelBinding发生后重复验证,但后来我会重复我的验证逻辑.
每个人对验证的建议是什么?数据注释验证是否足够?或者是否需要重复验证以确保在所有情况下都能触发验证?
后续评论: 根据以下答案,我似乎不能单独依赖Model Binder和Data Annotation验证.由于我们得出结论认为需要额外的服务器端验证,我的服务层是否有一种简单的方法可以根据数据注释中定义的内容触发验证?看起来这将使我们两个词中最好的...我们不需要重复验证代码,但我们仍然会确保即使Model Binder没有触发它也会执行验证.
我将把这个后续评论作为一个单独的问题发布,因为它提出了一个与原始评论不同的问题.
在允许发布表单之前,有没有办法使用数据注释来比较两个表单字段(例如确认电子邮件地址)是否相同?
例如.正则表达式数据注释可以使用匹配函数来引用ViewModel中的另一个属性吗?
我创建了一个EF4.1代码优先模型(可能重要也可能不重要),我正在尝试获取我的创建脚手架模板的默认值.我的模型看起来像:
class Person {
[DefaultValue (18)]
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我的Create视图看起来像:
<div class="editor-label">
@Html.LabelFor(model => model.Age)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Age)
@Html.ValidationMessageFor(model => model.Age)
</div>
Run Code Online (Sandbox Code Playgroud)
我希望在运行时,EditorFor会用"18"预先填充文本框,但它没有这样的东西.我误解了DefaultValue属性的用途,还是我应该做的其他事情?
注意:我不想new { Value = "18" }在EditorFor方法上使用覆盖,它似乎打破了DRY.
我的视图模型中有一个属性如下:
[Editable(false)]
[Display(Name = "Date")]
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
public DateTime MovementDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
然而是加价
<td>
@Html.DisplayFor(modelItem => item.MovementDate)
</td>
Run Code Online (Sandbox Code Playgroud)
将日期值呈现为2013/05/15 12:00:00 AM.
我究竟做错了什么?我的模特:
public class WithDateModel
{
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}")]
public DateTime TheDate { get; set; }
public WithDateModel()
{
TheDate = DateTime.Now;
}
}
Run Code Online (Sandbox Code Playgroud)
我的看法:
@model ParkPay.WebTests.Models.WithDateModel
@Html.DisplayFor(m => m.TheDate)
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Run Code Online (Sandbox Code Playgroud)
呈现的内容:
2013/05/25 02:23:37 AM
Run Code Online (Sandbox Code Playgroud) 我正在使用CodeFirst Entitty框架5.我有一个代表用户的类.
public class User
{
[Key]
public int UserId { get; set; }
[Url]
[DataType(DataType.Url)]
[Required(AllowEmptyStrings= true)]
public string WebSite { get; set; }
[Phone]
[DataType(DataType.PhoneNumber)]
[Required(AllowEmptyStrings = true)]
public string Phone { get; set; }
[Phone]
[DataType(DataType.PhoneNumber)]
[Required(AllowEmptyStrings = true)]
public string Fax { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我喜欢验证机制Phone和Url属性很多,但不幸的是,当标记有这些属性的字段是我想要允许的空字符串时,验证失败.[Required(AllowEmptyStrings = true)]似乎不适用Phone或Url属性.这似乎适用于其他一些DataAnnotations属性EmailAddress.
有没有办法为标记有这些属性的字段允许空字符串?
c# validation entity-framework data-annotations ef-code-first
我正在用C#构建一个MVC Web应用程序.由于该网站将是多语言的,我已经实现了自己的ResourceManager.该类负责从数据库/缓存中获取所需的资源字符串,具体取决于当前的线程文化,并且到目前为止工作正常.
我的问题是,我想使用我的自定义ResourceManager解决方案来获取验证错误消息,例如在属性上使用必需属性.可以这样做吗?
有没有人看过日期验证的MVC3数据注释要求单个选定日期等于或大于当前日期?
如果已经有第三方添加,那也很酷.我已经在使用DataAnnotationsExtensions,但它没有提供我正在寻找的东西.
似乎没有任何关于此的参考.因此,希望有人在我尝试重新发明轮子并编写自己的自定义验证器之前已经解决了这个问题.
我已经尝试Range但需要2个日期,两者都必须是字符串格式的常量,[Range(typeof(DateTime), "1/1/2011", "1/1/2016")]但这没有帮助.DataAnnotationsExtensions Min验证器只接受int和double
更新已解决
感谢@BuildStarted,这是我最终得到的,它在我的脚本中运行良好的服务器端和现在的客户端
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
namespace Web.Models.Validation {
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class DateMustBeEqualOrGreaterThanCurrentDateValidation : ValidationAttribute, IClientValidatable {
private const string DefaultErrorMessage = "Date selected {0} must be on or after today";
public DateMustBeEqualOrGreaterThanCurrentDateValidation()
: base(DefaultErrorMessage) {
}
public override string FormatErrorMessage(string name) {
return string.Format(DefaultErrorMessage, name);
}
protected override ValidationResult IsValid(object …Run Code Online (Sandbox Code Playgroud) 如何在MVC.Net中验证模型的最佳方法,我希望接受最小/最大值.
不是字段的单个最小值/最大值.但是单独的字段供用户指定最小值/最大值.
public class FinanceModel{
public int MinimumCost {get;set;}
public int MaximumCost {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
所以我需要确保MinimumCost始终小于最大成本.
data-annotations ×10
asp.net-mvc ×7
c# ×4
validation ×3
.net ×1
datetime ×1
minimum ×1
model ×1
resources ×1