2013-01-03 72 views
1

我按照我在網上找到的步驟來做到這一點,但它似乎沒有工作。這是一個使用Razor2的MVC4項目。在Linq生成的類中使用DataAnnotations

這裏是我創建

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,但也沒有顯示出來。

不知道我在這裏錯過了什麼。

+0

是否需要顯示金額的驗證錯誤? –

+1

你能否詳細解釋哪些工作不正常? –

+0

@EstebanElverdin十進制出去到許多小數和日期時間是表示時間和日期。 – Jhorra

回答

1

DisplayFormat僅適用於EditorForDisplayFor。使用

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

這就是我失蹤了。 – Jhorra

0

你可以通過使用下面的部分類來做到這一點。

  1. LINQ到SQL生成對象類是部分

  2. 創建自己的部分類爲您創建的部分類對象

  3. 放置[MetadataType(typeof(YourDataAnnotationIncludedClassName))]

示例代碼:

的LINQ to SQL生成

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

創建元數據你自己的元數據類要驗證

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

創建要添加元數據的Object類的另一個分部類,這裏是Provider類:

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

重要提示:你不需要在類中指定任何東西,只是元數據類型。

然後你就可以在你的查看使用下面喜歡:

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

編輯

爲了您小數問題可以像下面來處理。

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

OR

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

爲了您日期問題:

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

附加說明:

DisplayFormat只適用於EditorFor和DisplayFor幫手

我希望這會對您有所幫助。

+0

我不確定你是否看過我的問題,但這正是我所做的。 – Jhorra

+0

@Jhorra請檢查我的EDIT部分 – Sampath