2011-03-29 16 views
9

मैं जोड़ सकते हैं कैसे गतिशील रूप से सत्यापन करने के लिए नियंत्रण जोड़ा जोड़ा?मान्य गतिशील नियंत्रण

<div class="editor-field"> 
    @*@Html.EditorFor(model => model.Middlename)*@ 
    <div id="x"></div> 

    <script type="text/javascript"> 

     $(function() { 

      var newTextBoxDiv = $(document.createElement()); 

      newTextBoxDiv.html('<input type="text" name="Middlename" id="Middlename" width="100" data-val="true" data-val-required="The Middleneim field is required." />'); 

      newTextBoxDiv.appendTo('#x'); 
     }); 

    </script> 

    @Html.ValidationMessageFor(model => model.Middlename) 
</div> 

मैंने देखा है कि जब मैं तैयार समारोह का उपयोग नहीं करते हैं, जैसे कि

<script type="text/javascript"> 


var newTextBoxDiv = $(document.createElement()); 

newTextBoxDiv.html('<input type="text" name="Middlename" id="Middlename" width="100" data-val="true" data-val-required="The Middleneim field is required." />'); 

newTextBoxDiv.appendTo('#x'); 
</script> 

, क्लाइंट-साइड सत्यापन किक में। क्या सत्यापन में स्थगित रूप से बनाए गए इनपुट को स्पष्ट रूप से शामिल करने का कोई तरीका है?

+0

आप पृष्ठ के शीर्ष पर त्रुटि के बारे में जानकारी दिखाने के लिए चाहते हैं? यदि ऐसा है तो आप MiddleName मान प्राप्त कर सकते हैं और इसे सत्यापित कर सकते हैं। यदि यह मान्य इनपुट नहीं करेगा तो मॉडलस्टेट जोड़ें। AddModelError ("", ""); – AEMLoviji

+0

पृष्ठ के शीर्ष पर कोई त्रुटि नहीं है, मैं एएसपी.नेट एमवीसी 3 का उपयोग कर रहा हूं। डिफ़ॉल्ट क्लाइंट-साइड सत्यापन है। मैं सोच रहा हूं कि जब मैं jQuery के तैयार फ़ंक्शन का उपयोग नहीं कर रहा हूं, तो सबकुछ सामान्य है, यानी गतिशील रूप से जोड़ा गया इनपुट डिज़ाइन-टाइम जोड़ा इनपुट से अलग नहीं है, यह (गतिशील रूप से जोड़ा गया) भी मान्य है (जब उपयोगकर्ता टाइप कर रहा है) अगर यह आवश्यक है या नहीं –

उत्तर

0

यह तकनीकी रूप से सत्यापनकर्ता के "window.mvcClientValidationMetadata" सरणी में मानों धक्का द्वारा MVC ग्राहक साइड सत्यापन में जोड़ने के लिए संभव है। वहाँ एक बहुत अच्छी लेख here जो स्क्रिप्ट और तकनीक शामिल में से कुछ पता चलता है। यह सर्वर साइड सत्यापन के साथ मदद नहीं करेगा, लेकिन ग्राहक के रूप में इस इनपुट जावास्क्रिप्ट के बिना आप इस कम किया है नहीं मिलेगा।

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

1

अद्यतन: यह उत्तर यह है कि यदि आप jquery अविभाज्य सत्यापन का उपयोग करते हैं, तो आपने जो लिखा है उसे आपने नहीं लिखा है। http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/

ध्यान रखें कि आप प्रपत्र टैग के अंदर अपने तत्व जोड़ना होगा:

पहले, jQuery तैयार करने के लिए इस प्लगइन जोड़ें। आइए कहें कि आपके टैग के चारों ओर कुछ रैपर है, मैं इसे "तत्व" कहूंगा।

आप डोम के लिए अपने तत्व संलग्न के बाद, इस फोन:

$.validator.unobtrusive.parseDynamicContent($(element).find("form").selector); 
var form = $(element).find("form"); 
$(form).valid(); 
    $(form).find("input").each(function() { 
     $(this).blur(function() { 
      $(this).valid(); 
     }); 
    }); 
    $(form).find("select").each(function() { 
     $(this).change(function() { 
      $(this).valid(); 
     }); 
संबंधित मुद्दे