所以根据Gu IValidatableObject.Validate()应该在控制器验证它的模型时(即之前ModelState.IsValid)调用,但是简单地使模型工具IValidatableObject似乎不起作用,因为Validate(..)不会被调用.
任何人都知道我是否还有其他东西可以连接起来让它起作用?
编辑:
这是所要求的代码.
public class LoginModel : IValidatableObject
{
[Required]
[Description("Email Address")]
public string Email { get; set; }
[Required]
[Description("Password")]
[DataType(DataType.Password)]
public string Password { get; set; }
[DisplayName("Remember Me")]
public bool RememberMe { get; set; }
public int UserPk { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var result = DataContext.Fetch( db => {
var user = db.Users.FirstOrDefault(u => u.Email == Email);
if (user == null) return …Run Code Online (Sandbox Code Playgroud) 我正在使用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)
谢谢!
我希望客户端验证与服务器端验证一样好.我意识到这一点如下:
型号:(该模型有一个包含Test类的DataModel(dbml))
namespace MyProject.TestProject
{
[MetadataType(typeof(TestMetaData))]
public partial class Test
{
}
public class TestMetaData
{
[Required(ErrorMessage="Please enter a name.")]
[StringLength(50)]
public string Name { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
控制器没什么特别的.
风景:
<% Html.EnableClientValidation(); %>
<% using (Ajax.BeginForm("Index", "Test", FormMethod.Post,
new AjaxOptions {}, new { enctype = "multipart/form-data" }))
{%>
<%= Html.AntiForgeryToken()%>
<fieldset>
<legend>Widget Omschrijving</legend>
<div>
<%= Html.LabelFor(Model => Model.Name) %>
<%= Html.TextBoxFor(Model => Model.Name) %>
<%= Html.ValidationMessageFor(Model => Model.Name) %>
</div>
</fieldset>
<div>
<input type="submit" value="Save" />
</div>
<% …Run Code Online (Sandbox Code Playgroud) validation client-side-validation data-annotations asp.net-mvc-2
我正在尝试使实体框架字符串属性的服务器端验证工作.其他服务器端验证(如数据类型验证和所需的dateTime和数字EF属性)正在运行.
这在VS 2010,.Net 4.0,MVC2 + Cloud,ADO.Net Entity Framework中.
我遇到问题的字符串属性映射到SQL 2008,Varchar(50)非可空列.
当我尝试使用此属性的空字符串发布到我的Create操作时,我得到了以下错误.
异常详细信息:System.Data.ConstraintException:此属性不能设置为空值.
当我使用空格发布到操作时,我成功获得了必填字段验证消息.
我尝试过使用Data Annotations和ClientSideValidation,但似乎ClientSideValidation在部分视图和jquery对话框上有问题.
这是来自实体框架的原始自动生成代码.
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
public global::System.String GradeTypeName
{
get
{
return GradeTypeName;
}
set
{
OnGradeTypeNameChanging(value);
ReportPropertyChanging("GradeTypeName");
_GradeTypeName = StructuralObject.SetValidValue(value, false);
ReportPropertyChanged("GradeTypeName");
OnGradeTypeNameChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
根据Action方法(CREATE或EDIT)的签名,在调用UpdateModel()之前,可能会在步入方法之前或在方法内发生异常.内部异常位于model.designer.cs文件的下面一行.
_GradeTypeName = StructuralObject.SetValidValue(value, false);
Run Code Online (Sandbox Code Playgroud)
我已经能够在一个简单的mvc2 Web应用程序上重现这一点.
[Compare(" ")]"在ASP.NET中,数据注释的反面/否定是什么?
即:两个属性必须包含不同的值.
public string UserName { get; set; }
[Something["UserName"]]
public string Password { get; set; }
Run Code Online (Sandbox Code Playgroud) 我想为我的模型中的一个字段渲染文本区域.
我已经尝试过申请[DataType(DataType.MultilineText)]我的领域了,但这并没有成功.
目前,我手动渲染文本区域,但我更喜欢使用Html.EditorFor.有什么建议?
asp.net-mvc textarea multiline data-annotations asp.net-mvc-4
说我有以下课程:
public class ContactUsFormModel : AddressModel
{
[DisplayName("Title")]
[StringLength(5)]
public string Title { get; set; }
[DisplayName("First name (required)")]
[Required(ErrorMessage = "Please enter your first name")]
[StringLength(50, ErrorMessage = "Please limit your first name to {1} characters.")]
public string FirstName { get; set; }
// etc...
}
Run Code Online (Sandbox Code Playgroud)
我能够从AddressModel类中的ContactUsFormModel类向属性添加必需属性吗?
这更像是一个理论问题.
我目前正在使用ComponentModel.DataAnnotations检查MVC 3验证,一切都在自动运行,特别是在客户端.
某种程度上会检查这些属性,并为验证生成javascript(或html5属性,如果使用不显眼的模式),它可以工作.
我的问题是什么生成客户端javascript以及如何访问和修改它?例如,我想稍微处理给定的dataannotation属性,或处理自定义属性(我发现我可以从ValidationAttribute派生它们,但可能由于某些原因我不想要).
有人可以向我解释一下真正发生了什么吗?(或者链接到好的解释也会很好,因为我只找到了实际使用数据注释的教程)
编辑:此外,从ValidationAttribute派生,客户端验证不会自动运行.为什么?
我有一个强类型视图,它有一个DropDownListFor属性.
下拉列表中的每个项目都由GUID表示.
我所追求的是一种验证用户是否从下拉列表中选择项目的方法.目前我还没有看到使用数据注释做这件事.
无论如何使用数据注释实现这一点,因此客户端和服务器端验证将起作用.
我猜我需要制作一个自定义方法来做到这一点但是想知道是否已经存在任何东西.
C#枚举值不仅限于其定义中列出的值,还可以存储其基类型的任何值.如果未定义基本类型Int32或仅int使用基本类型.
我正在开发一个WCF服务,需要确信某些枚举具有一个值,而不是所有枚举为0的默认值.我从一个单元测试开始,找出是否[Required]能在这里做正确的工作.
using System.ComponentModel.DataAnnotations;
using Xunit;
public enum MyEnum
{
// I always start from 1 in order to distinct first value from the default value
First = 1,
Second,
}
public class Entity
{
[Required]
public MyEnum EnumValue { get; set; }
}
public class EntityValidationTests
{
[Fact]
public void TestValidEnumValue()
{
Entity entity = new Entity { EnumValue = MyEnum.First };
Validator.ValidateObject(entity, new ValidationContext(entity, null, null));
}
[Fact]
public void TestInvalidEnumValue()
{ …Run Code Online (Sandbox Code Playgroud) data-annotations ×10
asp.net-mvc ×5
c# ×5
validation ×2
asp.net ×1
enums ×1
guid ×1
multiline ×1
tdd ×1
textarea ×1
unit-testing ×1