दिलचस्प पोस्ट
AngularJS। नियंत्रक घटक के बाहर से नियंत्रक फ़ंक्शन को कैसे कॉल करें यदि मैं इसे स्पष्ट रूप से नहीं करता, तो सी ++ क्लास सदस्यों को कैसे आरंभ किया जाता है? आप आर आर कोड को कैसे कोडित करते हैं ताकि अन्य तर्कों में वेरिएबल्स के लिए 'डेटा' को देखने के लिए इसे 'जानता है'? Python के उपयोग से ps के आउटपुट को अलग करना बाश में, शेल आज्ञाएं तर्कों में उद्धरणों को क्यों अनदेखा करती हैं, जब तर्क उन्हें एक चर के रूप में पारित किया जाता है? कार्यात्मक प्रोग्रामिंग, स्काला मानचित्र और गुना छोड़ दिया सिंगलटन डिजाइन पैटर्न: नुकसान विंडो फ़ॉर्म के साथ विंडो शीर्षकबार में कस्टम बटन कैसे खींचना है? स्थिति बार गायब नहीं होगा कैसे Rpy2, pyrserve और PypeR तुलना करते हैं? FragmentPagerAdapter का उपयोग करके ViewPager में टुकड़ा रिक्त है दूसरी बार इसे देखा जाता है कैसे यूआरएल में हैश वर्ण से बचें ग्लोबल वैरिएबल और स्विफ्ट में वैकल्पिक बाइंडिंग बहुसंकेतक संचार के साथ जावा सर्वर पूल में जेडीबीसी कनेक्शन बंद करना

एएसपी। नेट एमवीसी 3 में दूसरे के मूल्य से संबंधित एक फ़ील्ड को कैसे मान्य किया जाए

मेरे दो क्षेत्रों में फोन नंबर और मोबाइल नंबर जैसी चीज़ थी। कुछ इस तरह..

[Required] public string Phone { get; set; } [Required] public string Mobile{ get; set; } 

लेकिन उपयोगकर्ता इसके किसी एक में डेटा दर्ज कर सकता है। एक अनिवार्य है कैसे उन्हें संभालना है कि कैसे एक फ़ील्ड के लिए आवश्यक फ़ील्ड वैदिकेटर को अक्षम करना है जब उपयोगकर्ता किसी दूसरे क्षेत्र में डेटा दर्ज करें और उपाध्यक्ष किस घटना में मुझे इसे जावास्क्रिप्ट में संभालना होगा और इसके लिए स्क्रिप्ट मुझे क्या चाहिए। किसी को भी समाधान खोजने में मदद कर सकते हैं …

Solutions Collecting From Web of "एएसपी। नेट एमवीसी 3 में दूसरे के मूल्य से संबंधित एक फ़ील्ड को कैसे मान्य किया जाए"

एक कस्टम सत्यापन विशेषता लिखना एक संभावना है:

 public class RequiredIfOtherFieldIsNullAttribute : ValidationAttribute, IClientValidatable { private readonly string _otherProperty; public RequiredIfOtherFieldIsNullAttribute(string otherProperty) { _otherProperty = otherProperty; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var property = validationContext.ObjectType.GetProperty(_otherProperty); if (property == null) { return new ValidationResult(string.Format( CultureInfo.CurrentCulture, "Unknown property {0}", new[] { _otherProperty } )); } var otherPropertyValue = property.GetValue(validationContext.ObjectInstance, null); if (otherPropertyValue == null || otherPropertyValue as string == string.Empty) { if (value == null || value as string == string.Empty) { return new ValidationResult(string.Format( CultureInfo.CurrentCulture, FormatErrorMessage(validationContext.DisplayName), new[] { _otherProperty } )); } } return null; } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var rule = new ModelClientValidationRule { ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()), ValidationType = "requiredif", }; rule.ValidationParameters.Add("other", _otherProperty); yield return rule; } } 

जिसे आप अपने दृश्य मॉडल के गुणों में से किसी एक पर लागू करेंगे:

 public class MyViewModel { [RequiredIfOtherFieldIsNull("Mobile")] public string Phone { get; set; } public string Mobile { get; set; } } 

तो आप एक नियंत्रक हो सकता है:

 public class HomeController : Controller { public ActionResult Index() { return View(new MyViewModel()); } [HttpPost] public ActionResult Index(MyViewModel model) { return View(model); } } 

और अंत में एक दृश्य जिसमें आप इस कस्टम नियम के लिए क्लाइंट साइड सत्यापन को तार करने के लिए एक एडेप्टर पंजीकृत करेंगे:

 @model MyViewModel <script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> <script type="text/javascript"> jQuery.validator.unobtrusive.adapters.add( 'requiredif', ['other'], function (options) { var getModelPrefix = function (fieldName) { return fieldName.substr(0, fieldName.lastIndexOf('.') + 1); } var appendModelPrefix = function (value, prefix) { if (value.indexOf('*.') === 0) { value = value.replace('*.', prefix); } return value; } var prefix = getModelPrefix(options.element.name), other = options.params.other, fullOtherName = appendModelPrefix(other, prefix), element = $(options.form).find(':input[name="' + fullOtherName + '"]')[0]; options.rules['requiredif'] = element; if (options.message) { options.messages['requiredif'] = options.message; } } ); jQuery.validator.addMethod('requiredif', function (value, element, params) { var otherValue = $(params).val(); if (otherValue != null && otherValue != '') { return true; } return value != null && value != ''; }, ''); </script> @using (Html.BeginForm()) { <div> @Html.LabelFor(x => x.Phone) @Html.EditorFor(x => x.Phone) @Html.ValidationMessageFor(x => x.Phone) </div> <div> @Html.LabelFor(x => x.Mobile) @Html.EditorFor(x => x.Mobile) @Html.ValidationMessageFor(x => x.Mobile) </div> <button type="submit">OK</button> } 

हमारे रोजमर्रा की जिंदगी में मुठभेड़ वाले सत्यापन नियम के रूप में कुछ बहुत सुंदर बीमार सामान। मुझे नहीं पता कि एएसपी.नेट एमवीसी के डिजाइनर क्या सोचते हैं जब उन्होंने अनिवार्य के बजाय सत्यापन के लिए एक घोषणात्मक दृष्टिकोण लेने का फैसला किया।

वैसे भी, इसलिए मैं अपने मॉडल पर मान्यताओं को पूरा करने के लिए डेटा एनोटेशन के बजाय FluentValidation.NET का उपयोग करता हूं। इस तरह के सरल सत्यापन परिदृश्यों को कार्यान्वित करना एक तरह से लागू किया गया है – यह सरल होगा।

मुझे पता है कि यह सवाल इतना गर्म नहीं है, क्योंकि यह अपेक्षाकृत लंबे समय पहले पूछा गया था, फिर भी मैं इस तरह के मुद्दे को सुलझाने के थोड़ा अलग विचार के साथ साझा करने जा रहा हूं। मैंने ऐसे तंत्र को लागू करने का निर्णय लिया है जो अन्य गुणों के मूल्यों और उनके बीच संबंधों के आधार पर सत्यापन परिणामों की गणना करने के लिए सशर्त विशेषताओं को प्रदान करता है, जो तार्किक अभिव्यक्तियों में परिभाषित होते हैं।

आपकी समस्या को परिभाषित किया जा सकता है और निम्नलिखित टिप्पणियों के उपयोग से स्वचालित रूप से हल किया जा सकता है:

 [RequiredIf("Mobile == null", ErrorMessage = "At least email or phone should be provided.")] public string Phone{ get; set; } [RequiredIf("Phone == null", ErrorMessage = "At least email or phone should be provided.")] public string Mobile { get; set; } 

अगर आपको लगता है कि यह आपके उद्देश्यों के लिए उपयोगी होगा, अभिव्यक्तिविज्ञान पुस्तकालय के बारे में अधिक जानकारी यहां पायी जा सकती है । ग्राहक पक्ष मान्यता भी बॉक्स के बाहर समर्थित है।