2009-04-07 17 views
7

में डेटटाइम ऑब्जेक्ट किसी ने एमवीसी में बाध्यकारी मॉडल का उपयोग करके एक डेटटाइम प्रॉपर्टी में सफलतापूर्वक 2 टेक्स्टबॉक्स को बाध्य किया है, मैंने स्कॉट की विधि http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx को आजमाया लेकिन असंतुष्ट था क्योंकि यह HTML फ़ील्ड और मॉडल गुणों को एक ही नाम से रोकता है (इसलिए सत्यापन विफल होने पर सत्यापन सही सीएसएस सेट नहीं कर सका)।एएसपी.नेट एमवीसी

मेरा वर्तमान प्रयास बाध्यकारी कॉन्टेक्स्ट से ValueProviderResult ऑब्जेक्ट को हटाकर और दिनांक परिणाम से बनाई गई कुंजी और एक टीईएम (स्कॉट्स पोस्ट में .टाइम सम्मेलन का उपयोग करके) को जोड़कर इसे संशोधित करता है लेकिन मैं थोड़ा सा हूं बाइंडिंग कॉन्टैक्ट ऑब्जेक्ट के साथ सीधे गड़बड़ से सावधान रहें।

विचार यह है कि मैं मॉडल पर 2 डेटाटाइम की तुलना करने के लिए IDateErrorInfo और VAB PropertyComparisonValidator का उपयोग कर सकता हूं, जहां किसी को दूसरे के बाद में होना चाहिए, ऐसा करने के लिए समय तत्व को शामिल करने की आवश्यकता है।

उत्तर

3

मैं एक अलग दृष्टिकोण का उपयोग करता हूं और मॉडल के दो अलग-अलग सेटों के लिए जाता हूं: मेरे व्यू मॉडल में दो गुण होंगे और उन फ़ील्ड के लिए सत्यापन होगा, जबकि मेरे डोमेन मॉडल में एक डेटटाइम होगा। तब बंधन के बाद, मैं दृश्य मॉडल डोमेन अपडेट करने दें:

public ActionResult Update(DateInput date) 
{ 
    if(date.IsValid) 
    { 
     var domain = someRepository.GetDomainObject(); // not exactly, but you get the idea. 
     date.Update(domain); 
    } 
    // ... 
} 

public class DateInput 
{ 
    public string Date { get; set; } 
    public string Time { get; set; } 

    public void Update(DomainObject domain) { ... } 
} 

public class DomainObject 
{ 
    public DateTime SomePointInTime { get; set; } 
} 
+0

मैं इस दृष्टिकोण बहुत पसंद है, मैं इसे एक जवाब के रूप स्वीकार कर लिया है के रूप में यह एक छोटा सा मेरी समाधान की तुलना में क्लीनर काम करता है (कोई बाइंडिंग के साथ के बारे में खिलवाड़) – Pharabus

संबंधित मुद्दे