ASP.NET MVC 2将支持基于DataAnnotation属性的验证,如下所示:
public class User
{
[Required]
[StringLength(200)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何仅使用纯.NET(不使用MVC绑定,控制器方法等)检查当前模型状态是否有效?
理想情况下,这将是一个单一的方法:
bool IsValid(object model);
Run Code Online (Sandbox Code Playgroud) 我使用生成的类作为模型,我希望将DataAnnotation属性添加到它的一些属性中.因为它是生成的代码,所以我不想直接添加注释.还有另一种方法将它们附加到财产上吗?
我考虑过将模型作为接口,并使用部分类来生成类以订阅它.是否有一个不太精细的解决方案,假设它甚至可以工作?
我试图弄清楚如何在我的MVC 2 ViewModel中使用DisplayAttribute来使用Html.LabelFor()帮助器.
也不
public class TestModel
{
[Display(ResourceType = typeof(Localization.Labels))]
public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
也不
public class TestModel
{
[Display(Name = "test")]
public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
似乎工作.本地化必需属性按预期工作:
[Required(ErrorMessageResourceName = "Test", ErrorMessageResourceType = typeof(Localization.Labels))]
Run Code Online (Sandbox Code Playgroud)
我正在使用VS2010 RC.有人跑了吗?
我正在尝试使用资源文件在MVC 2项目中保存模型的标签文本.
我有以下课程......
public class Person
{
[Display(ResourceType = typeof(Resources.Labels),Name="First")]
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
......并尝试过使用......
<%: Html.EditorForModel() %>
<%: Html.EditorFor(m => m) %>
<%: Html.LabelFor(m => m.FirstName) %>
Run Code Online (Sandbox Code Playgroud)
...但我在所有实例中都获得了标签的"FirstName".资源文件名为Labels.resx,具有"First"条目,位于Properties文件夹中.
阅读了几篇文章后,我相信这应该适用于.NET 4(我使用的是VS2010 RTM并且已经针对.NET 4).
这有用吗?
提前致谢
我有一个用C#... .Net 4.0编写的4层Web应用程序:
我的数据层包含一个edmx我的实体层包含我的POCO对象(由t4脚本生成),并且该层在所有其他层中引用.
例如,在创建MVC表单以创建新客户时....我已经在我的实体层中拥有了包含名字,姓氏等字段的客户类,但该自动生成的POCO类没有数据注释用于验证...提交表单时的IE [必需]等
我现在的解决方案是创建新的模型类,它与我的poco类几乎相同,但也有这些额外的验证注释.
我想知道的是,在MVC模型中(在UI层中)使用某些POCO对象是一种简单的方法,而不必几乎重写类...而且还没有修改生成这些POCO类的t4(因为我在t4上没有达到速度.
我在stackoverflow http://automapper.codeplex.com/上的另一篇文章中看到了这个...不确定这是否会这样做或者是最好的解决方案.
有没有办法创建一个自定义属性,使EF CodeFirst 在分配给poco类的属性时使用nvarchar(max)作为数据类型?我知道这可以通过流畅的api实现,但我们希望将所有定义放在一个地方,这就是元数据类.
流畅的API:
modelBuilder.Entity<Event>().Property(p => p.TicketText).HasColumnType("nvarchar(max)");
Run Code Online (Sandbox Code Playgroud) fluent-interface code-first entity-framework-4 data-annotations ef4-code-only
我希望能够使用内置的,基于数据注释的,客户端不显眼的验证,但在我知道它通过之后,我自己做了ajax表单提交.
像这样的jQuery位:
$('#form').submit(function(e) {
e.preventDefault();
if (PassesUnobtrusiveValidation()) {
// ajax submit form
}
});
Run Code Online (Sandbox Code Playgroud)
是否存在PassedValidation事件或类似事件(内置于默认的基于asp.net mvc 3数据注释的客户端验证)我可以挂钩(如示例中的伪代码)?
我想这样做,所以我仍然可以利用基于数据注释的验证,然后以我想要的方式异步提交表单.我希望避免在客户端编写常见的验证,让asp.net mvc 3为我处理它,然后提交表单我想要的,使用$.ajax();
validation jquery unobtrusive-javascript data-annotations asp.net-mvc-3
嗨我在我的一个模型中有一个属性是:
[Required(ErrorMessage = "Total (Exc. GST) is a required field.")]
[Display(Name = "Total (Exc. GST):")]
[DataType(DataType.Currency)]
public virtual decimal TotalExcludingGst { get; set; }
Run Code Online (Sandbox Code Playgroud)
它上面有货币注释.
问题是当它在验证期间发生问题时它会显示4个小数位,例如
57500.0000
无论如何都要添加一个注释,使得这两个小数位在验证消息中?
我在MVC的模型中有一个类:
public class NewModel
{
public bool AllComplexes { get; set; }
public int UserID { get; set; }
public int? RoleID { get; set; }
public int ComplexID { get; set; }
[Required(ErrorMessage = "Please enter a user name."), StringLength(50)]
public string Username { get; set; }
[Required(ErrorMessage = "Please enter Password"), StringLength(100, ErrorMessage = "Password cannot be longer than 100 characters")]
public string Password { get; set; }
[Compare("Password", ErrorMessage = "Passwords do not match")]
[Required(ErrorMessage = "Please …Run Code Online (Sandbox Code Playgroud) 我正在使用Entity Framework(采用代码优先方法),并且使用预期的外键和唯一键约束成功创建了数据库。
我有这两个模型类:
public class Foo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public Bar Bar { get; set; }
}
public class Bar
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Index(IsUnique = true), StringLength(512)]
public string Url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而这个应用程序代码:
var foo = GetData();
using (DatabaseContext db = new DatabaseContext())
{
db.Entry(foo).State = EntityState.Added;
if (foo.Bar != null)
{
var bar = await db.Bar.FirstOrDefaultAsync(x => x.Url == foo.Bar.Url);
if (bar …Run Code Online (Sandbox Code Playgroud) c# entity-framework navigation-properties data-annotations ef-code-first
data-annotations ×10
c# ×4
asp.net-mvc ×3
validation ×3
asp.net ×2
.net ×1
.net-4.0 ×1
code-first ×1
email ×1
jquery ×1
modelstate ×1
n-layer ×1
poco ×1