2010-10-18 21 views
0

我試圖爲我的模型中的對象設置數據註釋驗證,並且它有特殊的需要。我必須採取一些額外的屬性,我將它們加入並將它們結合起來,以獲得一個不動產的價值。比如我有一個基本對象:數據註解和元數據類型和「拼接值」

Task { 
    public DateTime? Due 
} 

但我的形式有以下字段:

Task.DueDate 
Task.DueTimeHour 
Task.DueTimeMinute 
Task.DueTimePostfix 

所以,我想:

Task { 
    public string DueDate 
    public string DueTimeHour 
    public string DueTimeMinute 
    public string DueTimePostfix 
} 

其中一期工程,但我想要的模型自動填充Due的值和所有其他值的解析值。我不知道該怎麼做。

我將不得不重寫元數據夥伴類中的Due的getter/setters,但該類不會意識到我給原始類的額外屬性。另外我有一種感覺,如果我把這些弄亂了,我將會從數據庫中檢索真正的值。

所以我希望有人在這裏可能有一個想法,我如何能夠完成我想要的。如果我完全錯了,我會很高興被引導回正確的道路上。

在此先感謝您的任何建議!

UPDATE

所以,我可能已經通過具有兩個原始類和元數據的好友類從含有所有屬性另一個基類延伸找到的所述第一部分中的溶液。因此這兩個類都可以看到屬性並可以使用它們。

現在,我很難根據其他屬性設置Due屬性的值。幫助將在這方面讚賞。

回答

0

所以,我覺得它只需要幾個小時的睡眠。這是我的最終代碼版本的人誰可能在將來有同樣問題的工作:

public partial class Task { 
    public DateTime DueDate { 
     get { 
      return (DateTime.Now); 
     } 
     set { 
      this.Due = value; 
     } 
    } 

    [Range(0, 23)] 
    public byte DueTimeHour { 
     get { 
      return (0); 
     } 
     set { 
      if (this.Due.HasValue) { 
       this.Due = DateTime.Parse(this.Due.Value.ToShortDateString() + " " + value + ":00:00"); 
      }; 
     } 
    } 

    [Range(0, 59)] 
    public byte DueTimeMinute { 
     get { 
      return (0); 
     } 
     set { 
      if (this.Due.HasValue) { 
       this.Due = DateTime.Parse(this.Due.Value.ToString("M/d/yyyy h") + ":" + value + ":00"); 
      }; 
     } 
    } 

    public string DueTimePostfix { 
     get { 
      return (string.Empty); 
     } 
     set { 
      if (this.Due.HasValue) { 
       this.Due = DateTime.Parse(this.Due.Value.ToString("M/d/yyyy h:m") + " " + value); 
      }; 
     } 
    } 
} 

最終,我不得不添加一個get,使其工作,這讓我好奇。我希望在每個房產上只需要輸入set,因爲我已經在那裏操作Due的價值,但是如果沒有get,它就無法運作。也許有人可以向我解釋一個?

1

你只需要重寫的get/set你的額外屬性:

public string DueDate { 
    get {return Due.Date.ToShortDateString();} 
    set { Due.Date = DateTime.Parse(value); } 
} 
public string DueTimeHour{ 
    get {return Due.Hours} 
    set { Due.Hours = Int32.Parse(value); } 
} 
... 

還是我錯過了什麼?

+0

你可能會做些什麼。額外的屬性'DueDate','DueTimeHour','DueTimeMinute'和'DueTimePostfix'只在POST時填充,我想將它們拼接在一起形成'Due'。所以,這是他們唯一使用的時間。當我從數據庫中讀取數據時,它應該進入正常流程,我只使用'Task.Due'。 – Gup3rSuR4c 2010-10-18 09:44:57

+0

好的,所以我嘗試了你的解決方案,並且看起來很好,它不起作用,因爲DateTime.Date是一個只讀屬性,因此我無法操作它。我需要根據我在其他屬性中可能具有的值創建完整的DateTime對象。 – Gup3rSuR4c 2010-10-18 15:16:09