साथ बाइंडिंग मैं एक सदस्य toBeRemoteChecked
और एक सदस्य valueToMap
के साथ एक मॉडल MapToA
के साथ एक मॉडल ModelA
है। जब भी मैं ModelA
का उदाहरण बनाता हूं, मुझे MapToA
का एक उदाहरण भी चाहिए, इसलिए मेरे पास एक मॉडल CreateModelA
है जिसमें एक सदस्य modelA
और सदस्य valueToMap
शामिल है। जब फॉर्म सबमिट किया जाता है, तो मैं डेटाबेस तालिका ModelA
में जोड़ता हूं और MapToA
पर एक उदाहरण बना और जोड़ता हूं जिसमें modelA
और valueToMap
की आईडी शामिल होती है। कोड की शर्तें मेंASP.NET MVC रिमोट मान्यता
public class ModelA
{
[Key]
public int ID { get; set; }
[Required, Remote("isValid", "MyController", ErrorMessage = "not valid")]
public string toBeRemoteChecked { get; set; }
}
public class MapToA
{
[Key]
public int Map_ID { get; set; }
[Required]
public int modelAID { get; set; }
[Required]
public int valueToMap { get; set; }
}
public class CreateModelA
{
public ModelA modelA { get; set; };
public int valueToMap { get; set; };
}
जब मैं ModelA
की घटना को, MapToA
में मानों कोई फर्क नहीं है (और ज्यादातर मामलों में एक ही modelA
आईडी के साथ mapToA
के एक से अधिक उदाहरण नहीं है), लेकिन के दूरदराज के सत्यापन toBeRemoteChecked
महत्वपूर्ण बना हुआ है।
मेरे समस्या: सत्यापन विधि के लिए बाध्यकारी:
public ActionResult isValid(string toBeRemoteChecked) { ... }
अगर मैं इसे छोड़ के रूप में यह है, यह जब एक ModelA
संपादन काम कर रहा है, लेकिन नहीं है जब मैं के माध्यम से CreateModelA
एक ModelA
(मैं हमेशा बना रहा हूं toBeRemoteChecked
में शून्य मान प्राप्त करें)। जब मैं BindPrefix
public ActionResult isValid([Bind(Prefix = "modelA.toBeRemoteChecked")] string toBeRemoteChecked) { ... }
का उपयोग जब मैं एक ModelA
बनाने यह काम कर रहा है, लेकिन जब मैं इसे संपादित कर रहा हूँ नहीं।
जब मैं एक ... @Name = "toBeRemoteChecked" ...
जोड़ने @Html.TextBoxFor
की htmlAttributes में (modelA.toBeRemoteChecked
कि HTML सहायक द्वारा बनाई गई है के बजाय) द्वारा Create.cshtml में "नाम" को बदलने की कोशिश, तो मान्यता काम कर रहा है, लेकिन के बंधन तालिका का मान गुम हो जाता है और जब मान डेटाबेस (शून्य मान) में सहेजे जाते हैं तो मुझे त्रुटि मिलती है।
तो, मैं बनाने और संपादित करने के लिए विभिन्न बाध्यकारी कैसे प्राप्त करूं?
अब तक, मेरी वैकल्पिक हल ModelA
और CreateModelA
: IValidatableObject
बनाने के लिए और मेरी public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
विधि में सदस्य toBeRemoteChecked
जाँच करने के लिए है। लेकिन वह फ़ॉर्म के शीर्ष पर त्रुटि संदेशों को प्रदर्शित करता है, न कि TextFor बॉक्स के स्थान पर।
तो: सबसे अच्छा समाधान: बाध्यकारी कैसे करें कि रिमोट सत्यापन दोनों मामलों में कैसे काम करता है?
दूसरा सबसे अच्छा: कैसे जहां यह के अंतर्गत आता है IValidatableObject
वस्तु के पास की त्रुटि संदेश प्रदर्शित (और जमा करने के बाद नहीं, दाहिने हाथ पर त्रुटि संदेश प्राप्त)
विभिन्न विचारों या समाधान करने के लिए: आपका स्वागत है।
धन्यवाद।
धन्यवाद। क्लाइंट साइड सत्यापन के लिए, मैंने उत्तराधिकारी विकल्प की कोशिश की - एक डेमो प्रोजेक्ट भी काम कर रहा था, लेकिन जब मैं 'db.ModelAset.Add (createModelA) जोड़ें 'मैं या तो डेटाबेस में स्वचालित रूप से जोड़े गए अवांछित अतिरिक्त कॉलम के साथ समाप्त होता हूं या मुझे मिलता है डेटाबेस से उन स्तंभों को मैन्युअल रूप से हटाए जाने के बाद 'अवैध कॉलम नाम' त्रुटि। मैं 'db.ModelAset.Add (modelA) 'कर सकता हूं, जब मैं सभी आवश्यक सदस्यों को' createModelA' से 'modelA' में कॉपी करके मैन्युअल रूप से' मॉडलए 'बनाता हूं। क्या इसके लिए कोई छोटा सा कट है? (मेरे असली मॉडल में लगभग 20 सदस्य हैं, इसलिए यह संभव है, लेकिन बहुत अच्छा नहीं है)। धन्यवाद। – outofmind
आपको अपना अंतिम पैराग्राफ दोबारा पढ़ने की जरूरत है :) एक व्यू मॉडल का डेटाबेस से कोई संबंध नहीं है। –
ठीक है।तो मुझे दृश्य मॉडल से डेटा मॉडल में डेटा को स्थानांतरित करते समय अतिरिक्त प्रयास है, आपकी मदद के लिए धन्यवाद :-) – outofmind