मैं, asp.NET MVC 2 RC2 में अपने मॉडल को मान्यता जोड़ने के लिए DataAnnotations उपयोग करने के लिए कोशिश कर रहा हूँ TryUpdateModelasp.NET MVC 2 DataAnnotations UpdateModel <T> सत्यापन
var user = UserManager.Find(id);
this.TryUpdateModel<IProvisioningObject>(user, form.ToValueProvider());
यह मॉडल अद्यतन करता है का उपयोग करते हुए, लेकिन सत्यापन कभी नहीं कहा जाता है। मैंने TryUpdateModel के साथ-साथ (जो कि प्रत्यक्ष प्रकार का उपयोगकर्ता है) का उपयोग करने का प्रयास नहीं किया, प्रॉपिजनिंग ऑब्जेक्ट का उपयोग करके फॉर्म वैल्यू प्रदाता का उपयोग नहीं कर रहा है (जिसका सत्यापन मेटाडेटा है), इसका कोई फायदा नहीं हुआ।
उदाहरण के लिए Googling केवल मुझे एक पैरामीटर
public ActionResult Update(User user)
कौन सा मैं अद्यतन परिदृश्यों के लिए नापसंद के माध्यम से जुड़ कर DataAnnotations का उपयोग करने के तरीके देता है।
कोई सुझाव और/या समाधान?
EDIT मेरी ऑब्जेक्ट्स डब्ल्यूसीएफ सेवा से स्वत: जेनरेट की गई वस्तुएं हैं।
मैंने आंशिक रूप से DataAnnotations जोड़ने में सक्षम होने के लिए आंशिक बनाया। मैं TryUpdateModel को तीन बार कॉल करता हूं क्योंकि यह स्पष्ट रूप से विरासत का समर्थन नहीं करता है, जो मुझे लगता है कि DataAnnotations के साथ भी मेरी समस्या है। मैं प्रोविजनिंग ऑब्जेक्ट के लिए सत्यापन गुण निर्दिष्ट करता हूं, और बाध्यकारी विरासत में ऐसी चीजों की तलाश नहीं करता है।
[MetadataType(typeof(ProvisioningObjectMetadata))]
public partial class ProvisioningObject : IProvisioningObject
{
public string DisplayNameInvariant { get { return string.IsNullOrEmpty(this.DisplayName) ? this.Name : this.DisplayName; } }
}
[MetadataType(typeof(UserMetadata))]
public partial class User : IUser
{
}
public class ProvisioningObjectMetadata
{
[DisplayName("Country")]
public string CountryIsoCode { get; set; }
[Required(ErrorMessageResourceType = typeof(Properties.Validation), ErrorMessageResourceName = "DisplayNameIsRequired")]
[TempValidator]
public string DisplayName { get; set; }
}
public class UserMetadata
{
[DisplayName("Username")]
public string Name { get; set; }
}
// Controller action
public ActionResult Update(string id, FormCollection form)
{
var user = UserManager.Find(id);
this.TryUpdateModel<IUser>(user.User, form.ToValueProvider());
this.TryUpdateModel<IPerson>(user.User, form.ToValueProvider());
this.TryUpdateModel<IProvisioningObject>(user.User, form.ToValueProvider());
if (ModelState.IsValid) // always true
{
return Redirect;
}
else
{
return View();
}
}
मैं UserMetadata में DisplayName मेटाडेटा जोड़ने, तो यह अपेक्षा के अनुरूप काम करता है, लेकिन कुछ भी नहीं है कि के लिए बहुत बेमानी लगता है। और इसका मतलब यह होगा कि मुझे अपने सभी विरासत वाले इंटरफेस को कॉपी/पेस्ट करना होगा, इसलिए TryUpdateModel उचित व्यवहार करता है।
मुझे लगता है कि मैं ऐसे तरीके की तलाश कर रहा हूं जिसके लिए मुझे विरासत कक्षाओं में मेरी सत्यापन विशेषताओं को कॉपी और पेस्ट करने की आवश्यकता नहीं है।
मैं सिर्फ UpdateModel करने की कोशिश की (के बाद से मैं MetadataType एक अंतरफलक पर नहीं डाल सकते हैं) और यह कुछ भी नहीं बदलता है। मैंने एक अस्थायी सत्यापनकर्ता बनाया है और ऐसा लगता है कि यह कभी भी IsValid विधि को हिट नहीं करता है। अद्यतन परिदृश्य के लिए, मुझे यकीन नहीं है कि मैं आपका अनुसरण करता हूं। यदि आपके पास ब्लॉग या उदाहरणों के अच्छे लिंक हैं, तो यह मुझे शुरू करने के लिए पर्याप्त होगा। आपके इनपुट के लिए धन्यवाद! –
क्या आप अधिक कोड पोस्ट कर सकते हैं? मैं इस बात पर स्पष्ट नहीं हूं कि आप अब क्या करने की कोशिश कर रहे हैं। – jfar
नया उत्तर टिप्पणी: विशेषताएं क्लाइंट-साइड हैं। मैं स्वत: जेनरेट की गई वस्तुओं में उचित विशेषताओं को जोड़ने के लिए आंशिक कक्षाओं का उपयोग करता हूं। –