我知道它很長一段時間,但是......只是不得不嘗試。有什麼辦法可以告訴哪個屬性的值來自?
例如,如果我使用SelectedDate屬性創建DateTime控件,如果在服務器端代碼中將其設置爲Person.DateOfBirth,那麼在DateTime控件中有任何方法可以告訴SelectedDate來自Person。出生日期?
我知道它很長一段時間,但是......只是不得不嘗試。有什麼辦法可以告訴哪個屬性的值來自?
例如,如果我使用SelectedDate屬性創建DateTime控件,如果在服務器端代碼中將其設置爲Person.DateOfBirth,那麼在DateTime控件中有任何方法可以告訴SelectedDate來自Person。出生日期?
不一般,沒有。
如果有人傾向於在設置屬性時檢查調用堆棧,但這應該是非常糟糕的形式,並且指出潛在的問題。我說你嘗試以另一種方式解決你的問題。你在找什麼結果?您想做什麼?
我剛纔在問題的評論中解釋了情況。 不,我不會訴諸調用堆棧:) – 2010-07-15 03:37:21
如果你想這樣做,我必須同意柔滑。但是,如果只想爲特定的類或此例中的控件執行此操作,則當然可以創建自己的控件,從您想要的任何控件繼承,然後覆蓋該屬性並將該設置器修改爲保存一些額外的信息。
,但我想你想一般做這個....
我已經完成了,覆蓋自定義控件中的屬性,但setter中的值顯示沒有指示它屬於哪個對象,到它在setter中的時候它只是一個DateTime。 – 2010-07-15 02:26:06
不知道這是否會工作,但只是一個想法。
如果通過Func <>委託訪問所選的日期值set和get,並且您將參數設置爲任何目標。從功能對象中,您應該能夠詢問方法和目標。我沒有嘗試過這個,所以如果你嘗試過,聽到你的想法會很棒。
只需添加到這個有可能的例子:
Func<DateTime> _selectedDate = person.GetDateOfBirth();
所以以後你可以索要源,如
if (_selectedDate.Target.GetType() == typeof(Person))
doSomething()
聽起來像它包括更改所選的日期對象類型或向控件添加新屬性......但謝謝!我會試試這個。 – 2010-07-15 03:32:50
你正在嘗試做顯然違反Separation of Concerns Principle。 DateTime控件的作用是顯示日期時間並允許用戶更改它。它不應該知道DateTime來自哪裏。
非常坦率地說,我很難想出爲什麼需要這個功能。表單是一個相當好理解的UI範例。您可以加載表單,從模型中設置表單元素的值,讓用戶更改值,讀取所有值,驗證它們並更新模型。還有什麼可以做到的?
編輯對於這個特定的問題,所有你需要做的就是在你的日期時間控件上創建標誌,比如ConvertToUTC
。設置爲true時,會將時間轉換爲UTC,如果不是,則用戶輸入的值將保持不變。應該很好,很乾淨。
這是真的......我可能因爲不想改變當前框架而錯誤了方向 – 2010-07-15 03:29:55
@neo:改變現有框架比在這樣的類型之間創建可怕的耦合更好。識別呼叫者並將其作爲架構的依賴部分將只會增加您的維護問題,而不會減輕維護問題。 「關注分離」是一種節約的優勢,如果您可以**修復**當前的框架以保持關注點分離,則將改善您的維護方案。 – jrista 2010-07-15 04:01:41
是的,這就是目前的解決方案,控件上的「StickyDate」布爾屬性 – 2010-07-15 05:01:01
我猜你需要得到setter客戶端。您可以將「rel」屬性設置爲setter,然後獲取「rel」屬性客戶端(例如jQuery)。
// server-side.
DateTimeControl.Attributes["rel"] = "Person.DateOfBirth";
// client-side (jQuery).
if $('#DateTimeControl').attr('rel') == 'Person.DateOfBirth' {
// logic here.
}
讓我知道是否需要詳細說明 - 謝謝。
爲什麼你想要這個功能? – jfs 2010-07-14 00:58:54
我正在處理一個國際化的系統,在日期時間控制中將日期轉換爲UTC,然後再轉到後端。最近有越來越多的例子需要......不可變的日期。例如,一個人的出生日期,如果他/她輸入6月15日,DateTime將以時間部分00:00:00保存,所以當它轉換爲UTC(-10)時,它將被保存爲14/06 14:00:00所以當有人在不同的時區查看它時,它可能會變成不同的日期。 – 2010-07-15 02:18:07
我所做的是使用自定義屬性「sticky」設置這些日期,並且目前在控件中找到一種方法來停止日期時間轉換。 截至目前,他們正在服務器端代碼手動轉換回來,但我可以看到這變成了維護噩夢... – 2010-07-15 02:23:03