将DataAnnotations与Linq生成的类一起使用

时间:2013-01-03 06:57:09

标签: asp.net-mvc razor asp.net-mvc-4 data-annotations razor-2

我按照我在网上找到的步骤执行此操作,但似乎无法正常工作。这是一个使用Razor2的MVC4项目。

这是我创建的元数据类

public class LedgerItemValidation
{
    [DisplayFormat(DataFormatString = "{0:#,##0.00#}", ApplyFormatInEditMode = true)]
    public decimal Amount { get; set; }

    [DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime StartDate { get; set; }
}

这是我创建的部分类,所以我可以应用这些

[MetadataType(typeof(LedgerItemValidation))]
public partial class LedgerItem
{
    ... other stuff
}

这是我在页面上显示的地方

@model CF.Models.LedgerItem

@Html.TextBoxFor(m => m.Amount)

从我在网上看到的,这应该是我所要做的。在我测试的时候,我也给了它一个DisplayName,但它也没有出现。

不确定我在这里缺少什么。

2 个答案:

答案 0 :(得分:1)

DisplayFormat仅适用于EditorForDisplayFor。使用

@Html.EditorFor(m => m.Amount)

答案 1 :(得分:0)

您可以使用如下的部分类来完成此操作。

  1. Linq to SQL生成的对象类是部分

  2. 为对象创建自己的分部类

  3. [MetadataType(typeof(YourDataAnnotationIncludedClassName))]放在您创建的分部上。

  4. 示例代码:

    Linq to SQL Generated Class

    public partial class Provider 
    {
       public string Name { get; set; }
    }
    

    为要验证的每个字段为元数据创建自己的MetaData类

    public class MyMetaDataProviderClass
    {
        [Required]
        [DisplayName("Provider Name")]
        public string Name { get; set; }
    }
    

    为要添加元数据的Object类创建另一个Partial Class,这里是Provider类:

    [MetadataType(typeof(MyMetaDataProviderClass))]
    public partial class Provider { }
    

    重要提示:您不需要在类中指定任何内容,只需要指定元数据类型。

    然后您可以在下面的查看中使用此功能:

    @Html.TextBoxFor(m => m.Name)
    

    修改

    对于十进制问题,可以按照以下方式处理。

    @Html.TextBox(m => Math.Round(m.Amount,2))
    

       @Html.EditorFor(m => m.Amount)
    

    对于日期问题:

    @Html.EditorFor(m => m.StartDate)
    

    附加说明:

      

    DisplayFormat仅适用于EditorFor和DisplayFor助手

    我希望这会对你有所帮助。