标签: data-annotations

ASP.NET MVC ModelMetaData:有没有办法根据RequiredAttribute设置IsRequired?

Brad Wilson在ASP.NET MVC的新ModelMetaData上发布了一个很棒的博客系列:http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

在其中,他描述了如何在Views和模板化助手中公开ModelMetaData类.我想要做的是如果字段是必需的,在表单字段标签旁边显示一个星号,所以我考虑使用ModelMetaData的IsRequired属性.但是,默认情况下,IsRequired对于所有非可空属性都是true,而对于所有可为空的属性都是false.问题是,字符串总是可以为空的,因此字符串的IsRequired属性始终为false.有谁知道如何覆盖IsRequired的默认设置?或者,我考虑利用我一直在用我的属性装饰的RequiredAttribute属性,但似乎没有通过ModelMetaData类公开RequiredAttribute.有谁知道如何解决这个问题?

提前致谢.

asp.net-mvc data-annotations asp.net-mvc-2

13
推荐指数
1
解决办法
3165
查看次数

如何在WebGrid中为列标题使用DisplayName数据注释?

我有一个Car类,我试图使用WebGrid助手在MVC 3视图中显示.下面是Car及其元数据类.

车类:

[MetadataType(typeof(CarMetadata))]
public partial class Car
{
    // car implementation
}
Run Code Online (Sandbox Code Playgroud)

汽车元数据类:

public class CarMetadata
{        
    [DisplayName("Car Name")]
    [StringLength(100, ErrorMessageResourceType = typeof(ValidationText), ErrorMessageResourceName="CarNameDescriptionLength")]
    [Required]
    public string CarName { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

查看内容:

@model List<Car>
...
var grid = new WebGrid(Model, canPage: true, rowsPerPage: 10);
grid.Pager(WebGridPagerModes.NextPrevious);

@grid.GetHtml(
    htmlAttributes: new { id = "grid" },
    columns: grid.Columns(
        grid.Column("CarName", ?????)
    ));
Run Code Online (Sandbox Code Playgroud)

目标:我想弄清楚如何使用DisplayName数据注释作为WebGrid(?????)中的列标题文本.有谁知道这是如何实现的?

提前致谢!

asp.net webgrid data-annotations asp.net-mvc-3

13
推荐指数
1
解决办法
6413
查看次数

如何将数据注释添加到分部类?

我有一个自动生成的类,上面有一个属性.我想在另一个相同类型的部分类中向该属性添加一些数据注释.我该怎么办?

namespace MyApp.BusinessObjects
{
    [DataContract(IsReference = true)]
    public partial class SomeClass: IObjectWithChangeTracker, INotifyPropertyChanged
    {
            [DataMember]
            public string Name
            {
                get { return _name; }
                set
                {
                    if (_name != value)
                    {
                        _name = value;
                        OnPropertyChanged("Name");
                    }
                }
            }
            private string _name;
    }
}
Run Code Online (Sandbox Code Playgroud)

在另一个文件中我有:

namespace MyApp.BusinessObjects
{
    public partial class SomeClass
    {
        private SomeClass()
        {
        }

        [Required]
        public string Name{ get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

目前,我收到一条错误,指出name属性已存在.

.net c# partial-classes data-annotations

13
推荐指数
1
解决办法
6366
查看次数

Guid的验证

我有一个强类型视图,它有一个DropDownListFor属性.

下拉列表中的每个项目都由GUID表示.

我所追求的是一种验证用户是否从下拉列表中选择项目的方法.目前我还没有看到使用数据注释做这件事.

无论如何使用数据注释实现这一点,因此客户端和服务器端验证将起作用.

我猜我需要制作一个自定义方法来做到这一点但是想知道是否已经存在任何东西.

c# asp.net-mvc guid data-annotations

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

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万
查看次数

如何在数据库实体的子模型上使用自定义验证属性?

摘要:

我想要一个数据注释验证器来引用同一个类中的另一个属性(TitleAuthorAndPublishingConfiguration).

但是,不直接在此类上调用DB.SaveChanges().而是在这个类(WebsiteConfiguration)的父级上调用它.

因此validationContext.ObjectType返回WebsiteConfiguration,我无法引用TitleAuthorAndPublishingConfiguration数据注释验证器中的属性.


WebsiteConfiguration.cs

public class WebsiteConfiguration
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public TitleAuthorAndPublishingConfiguration TitleAuthorAndPublishing { get; set; }

    public BookChaptersAndSectionsConfiguration BookChaptersAndSections { get; set; }

    public SocialMediaLoginsConfiguration SocialMediaLogins { get; set; }

    public TagGroupsConfiguration TagGroups { get; set; }
}

public class TitleAuthorAndPublishingConfiguration 
{
    public string BookTitle { get; set; }

    public bool IsPublished { get; set; }

    // how do I access …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc data-annotations dbcontext

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