标签: data-annotations

ASP.NET MVC,Linq to SQL Data Annotation Validation

我正在尝试将数据注释实现到我的Linq to SQL对象.生成.dbml文件,我不知道如何在不触及生成的源代码的情况下向对象添加数据注释.

我试图将数据注释添加到对象的单独的部分类中,但它没有识别它,也没有Intelli意义.

asp.net data-annotations

12
推荐指数
3
解决办法
8144
查看次数

淘汰JS +发送到MVC 3

我有以下代码,但一旦提交到服务器,我得到的字符串是"未定义"而不是null或空.这导致问题,因为我无法执行验证.任何想法如何防止这种情况发生时使用淘汰赛.

var viewModel = {
        userName: ko.observable(""),
        emailAddress: ko.observable(""),
        verifyEmailAddress: ko.observable(""),
        OptOut: ko.observable(true),
        Grades: ["Grade 1", "Grade 2", "Grade 3", "Grade 4", "Grade 5", "Grade 6"],
        gradeSelected: ko.observable(["Grade 1"])
    };
    ko.applyBindings(viewModel);

    $("#addUser").click(function (e) {
        $.ajax({
            url: 'AddUser',
            dataType: 'json',
            data: JSON.stringify(viewModel),
            type: 'POST',
            success: function (data) {
                $("#errorSection").text(data.Success).show();
            }   
        });
        e.preventDefault();
    });
Run Code Online (Sandbox Code Playgroud)

提前致谢

asp.net-mvc data-annotations knockout.js

12
推荐指数
1
解决办法
1561
查看次数

在MVC 3中,我无法获得@ Html.DisplayFor来呈现格式化的字符串

我希望这是一个非常简单的,虽然经过大量的谷歌搜索后,我无法解决这个问题.

我正在使用MVC 3在购物车网站上工作,并使用代码优先的实体框架.我发送的模型是Product对象列表,每个对象都包含以下属性:

[Required(ErrorMessage = "This is a required field.")]
[DataType(DataType.Currency)]
[Range(1.00, 500.00, ErrorMessage = "Products can not be free.")]
[DisplayFormat(DataFormatString = "{0:C}")]
[DisplayName("Price")]
public double Price { get; set; }
Run Code Online (Sandbox Code Playgroud)

我希望DisplayFormat属性会导致视图中的以下行将值格式化为货币(item是循环中的产品对象):

@Html.DisplayFor(modelItem => item.Price)
Run Code Online (Sandbox Code Playgroud)

但这根本不适用格式化.到目前为止,我能够让它工作的唯一方法是使用它:

@String.Format("{0:C}", item.Price)
Run Code Online (Sandbox Code Playgroud)

但如果可能的话,我宁愿使用@ Html.DisplayFor,因为它设计用于处理nulls之类的东西.我知道它会是0或更多.事实上,通过验证它总是有一定数量 - 但我想确保在我继续之前没有更正确的方法.

任何有关这方面的信息将非常感谢!

UPDATE

达林回答并指出它确实有效,这让我回到了实际上发送给视图的地方.我意识到虽然我有一个名为ProductModel的类,它具有DisplayFormat属性,但我实际上正在返回另一个包含产品列表的模型.这叫做ProductListModel,我意识到它返回了Product数据类的列表 - 而不是ProductModel类!

所以最后它实际上非常简单.只是希望我没有浪费半个晚上.感谢鼓励我回去检查一下,达林!

c# asp.net-mvc linq-to-entities entity-framework data-annotations

12
推荐指数
1
解决办法
2万
查看次数

为什么Html.DisplayTextFor忽略DisplayFormatAttribute?

我在其他地方读到DisplayFormat只是以与string.Format相同的方式使用DataFormatString.我试图显示一个长的电话号码; 在控制台应用程序中,以下工作:

const string PhoneFormat = "{0:###-###-####}";
long? phone = 8005551212;
string s = string.Format(PhoneFormat, phone);
Run Code Online (Sandbox Code Playgroud)

s ="800-555-1212"

为什么当我在我的视图中使用它时

@Html.DisplayTextFor(model => model.Patient.Phone)
Run Code Online (Sandbox Code Playgroud)

显示的是8005551212

这是模特......

public class Patient
{
    [DisplayFormat(DataFormatString = "{0:###-###-####}")]
    public long? Phone { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

还试过DisplayFor,这也行不通.

似乎对我有用的唯一方法是

Html.Raw(string.Format("{0:###-###-####}", Model.Patient.Phone))
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc data-annotations

12
推荐指数
1
解决办法
6506
查看次数

DataAnnotations"NotRequired"属性

我有一种复杂的模型.

我有我的UserViewModel,有几个属性,其中两个是HomePhoneWorkPhone.两种类型PhoneViewModel.在PhoneViewModel我有CountryCode,AreaCodeNumber所有字符串.我想使CountryCode可选的,但AreaCodeNumber强制性的.

这非常有效.我的问题是,这UserViewModel WorkPhone是强制性的,而HomePhone不是.

无论如何我可以通过在Require属性中PhoneViewModel设置任何属性来减少HomeWork属性吗?

我试过这个:

[ValidateInput(false)]
Run Code Online (Sandbox Code Playgroud)

但它只适用于类和方法.

码:

public class UserViewModel
{
    [Required]
    public string Name { get; set; }

    public PhoneViewModel HomePhone { get; set; }

    [Required]    
    public PhoneViewModel WorkPhone { get; set; }
}

public class PhoneViewModel
{
    public string CountryCode { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc validationattribute data-annotations asp.net-mvc-3

12
推荐指数
1
解决办法
2万
查看次数

MVC 4 - DataAnnotations - 对类型的验证

我有以下代码工作

    [Required(ErrorMessage = "Price is required.")]
    [Range(typeof(Decimal), "1", "9999", ErrorMessage = "Price xx.xx")]
    public decimal? productPrice { get; set; }
Run Code Online (Sandbox Code Playgroud)

当提交页面时,Price = EMPTY字段错误消息为"需要价格".价格=超过9999错误消息是"价格xx.xx".

但是,当我输入'aaaa'时,错误消息是 "字段productPrice必须是数字".

如果键入不正确,我该如何更改消息?例如:"价格必须是1-9999之间的小数/数字.

----更新:---- 以下代码使用

NULL,非十进制,在范围之间,但不使用".1".

    [Required(ErrorMessage = "Price is required.")]
    [RegularExpression(@"[0-9]*\.?[0-9]+", ErrorMessage = "Price must be a Numbers only.")]
    [Range(typeof(Decimal), "1", "9999", ErrorMessage = "Price must be a decimal/number between {1} and {2}.")]
    public decimal? productPrice { get; set; }
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc data-annotations

12
推荐指数
2
解决办法
4万
查看次数

使用数据注释标记"只读"字段

我试图让ID字段只读.它是数据库中的标识字段,因此用户不会设置它.但他们希望看到它.如果分配给a DataForm仍然允许该值被编辑,我在下面遗漏了什么.

public class StatusChoice : BindableBase
{
    private int id;

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Editable(false,AllowInitialValue = false)]
    public int ID
    {
        get { return id; }
        set
        {
            id = value;
            OnPropertyChanged();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# telerik data-annotations

12
推荐指数
2
解决办法
2万
查看次数

使用不显眼的javascript/MVC3和DataAnnotations验证电子邮件地址

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

11
推荐指数
3
解决办法
2万
查看次数

使用主表中的重命名字段和非主键创建实体关系

以下是我试图定义外键关系的两个部分表.

public class Form
{
    [Key, Column("FormID")]
    public System.Guid FormGUID { get; set; }

    [Column("PatGUID")]
    public Nullable<System.Guid> PatientGUID { get; set; }
}

public class Patient
{
    [Column("PatGUID")]
    public System.Guid PatientGUID { get; set; }

    [Key, Column("PatID")]
    public int PatientID { get; set; }
Run Code Online (Sandbox Code Playgroud)

}

除了相关的信息,字段,导航等,我已经删除了所有这个例子; 希望不要太多.

我们有一个表格表格,其中FK为PatGUID带有字段的患者表格PatGUID.Patient表有一个PatIDint KEY字段.

我们要求为代码第一实体模型重命名字段; 此示例中需要更改的相关字段将更PatGUID改为PatientGUID.

我遇到的困难是尝试使用注释或流利来定义此外键.

所以我需要的最终结果是:

  • 主要关键表:患者,字段:( PatGUID重命名为PatientGUID)

  • 外键表:表格,字段:( PatGUID重命名为PatientGUID)

这似乎不应该构成一个大问题,但是Patient.PatGUID不是主键和PatGUID重命名的字段的组合PatientGUID没有使WCF数据服务能够正确地创建具有适当引用的引用,因此正确的选择/连接的:

SELECT … …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework foreign-keys data-annotations

11
推荐指数
1
解决办法
2421
查看次数

使用EmailAddressAttribute验证.net中的电子邮件字符串,但不在属性上验证

我希望能够这样做:

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并想要检查哪些是有效的电子邮件.

.net c# data-annotations

11
推荐指数
1
解决办法
5773
查看次数