2011-08-10 19 views
13

पर एमवीसी 3 के साथ काम करने वाले अविभाज्य सत्यापन प्राप्त करने में समस्या मुझे एमवीसी 3 पर काम करने के लिए सत्यापन प्राप्त करने में बहुत परेशानी हो रही है। यह ठीक काम करता है जब मैं सिर्फ सीधे पृष्ठ लोड है, लेकिन यह पुष्टि नहीं करता है जब मैं jQuery AJAX के पद का उपयोग करें:jquery AJAX पोस्ट

<form action="/DartsMVC/Restaurant/Edit/13" method="post"> 
    <fieldset> 
     <legend>Restaurant</legend> 

     <input data-val="true" data-val-number="The field RestaurantID must be a number." data-val-required="The RestaurantID field is required." id="RestaurantID" name="RestaurantID" type="hidden" value="13"> 

     <div class="editor-label"> 
      <label for="Name">Name</label> 
     </div> 
     <div class="editor-field"> 
      <input class="text-box single-line" data-val="true" data-val-required="The Name field is required." id="Name" name="Name" type="text" value="furaibo"> 
      <span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span> 
     </div> 

     <p> 
      <input type="submit" value="Save" class="ui-button ui-widget ui-state-default ui-corner-all" role="button" aria-disabled="false"> 
     </p> 
    </fieldset> 
</form> 

AJAX पोस्ट है:

यह फार्म $('#modal-dialog').load('/DartsMVC/Restaurant/Edit/13') का उपयोग कर भरी हुई है, यह प्रदान की गई HTML है फॉर्म/सबमिट को रोककर उपयोग किया जाता है। पोस्ट पूरा होने के बाद मोडल संवाद पॉप अप हो जाता है और बंद हो जाता है। मैं पोस्ट भेजने से पहले फॉर्म को सत्यापित करना चाहता हूं:

// force change the submit data to an ajax POST (usually 'save', 'delete' button) 
$('#modal-dialog').delegate('form', 'submit', function (e) { 
    e.preventDefault(); 
    var form = $(this); 
    form.validate(); // does nothing 
    if (form.valid()) { 
     $.ajax({ 
      url: form.attr('action'), 
      type: "POST", 
      data: form.serialize(), 
      success: function (data) { 
       $('#modal-dialog').dialog('close'); 
      }, 
      error: function (jqXhr, textStatus, errorThrown) { 
       alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')"); 
      } 
     }); 
    } 
}); 

क्या मैंने ऐसा करके कुछ तोड़ दिया? .valid() हमेशा सच होता है।

मेरे web.config है:

मेरे पृष्ठ स्रोत है:

<link href="/DartsMVC/Content/themes/cupertino/jquery-ui-1.8.14.custom.css" rel="stylesheet" type="text/css"> 

<script src="/DartsMVC/Scripts/modernizr-1.7.min.js" type="text/javascript"></script> 
<script src="/DartsMVC/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script> 
<script src="/DartsMVC/Scripts/jquery-ui-1.8.14.custom.min.js" type="text/javascript"></script> 

<script src="/DartsMVC/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> 
<script src="/DartsMVC/Scripts/jquery.validate.js" type="text/javascript"></script> 
<script src="/DartsMVC/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script> 

और मेरे मॉडल है:

[Required] 
    public string Name { get; set; } 

अधिक अनुसंधान के बाद, मुझे लगता है कि हो सकता है गतिशील नियंत्रण के साथ कुछ करने के लिए:

  • चूंकि डेटा-वैल गुण मौजूद हैं, यह फॉर्म स्कोप समस्या
  • मैं $ .validator.unobtrusive.parse ('# formid') को कॉल करने का प्रयास करूंगा। अगर ऐसा doensn't काम, मैं इस अंतिम उपाय का उपयोग करेंगे:
  • http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/

उत्तर

26

हल

$ .validator.unobtrusive.parse कॉलिंग ($ ('फॉर्म')) किया छल। मुझे लगता है कि वैधता को गतिशील सामग्री

+0

धन्यवाद के लिए पुनर्निर्मित करने की आवश्यकता है! मैंने कुछ समय पहले यह पता लगाया था, लेकिन क्षमा कर रहा था और समाधान को फिर से ढूंढने में काफी मुश्किल थी। –

+0

@juhan_h आप उपरोक्त से $ .validator कोड को अपने कोड में कहां कॉल करते हैं। मैं एक ऐसी ही समस्या हो सकती है: '// reinitialize विनीत सत्यापन \t \t addValidationToForm:/ – Elisabeth

+1

@Elisa, मैं विनीत सत्यापन reinitializing के लिए एक AddRemoveValidator समारोह बना दी समारोह (formToAdd) { \t \t \t jQuery.each (formToAdd, समारोह (i, फार्म) { \t \t \t \t $ (फार्म) .removeData ("सत्यापनकर्ता"); \t \t \t \t $ .validator.unobtrusive.parse (फार्म); \t \t \t}); \t \t}, \t \t addValidationToFormRemoveFromOthers: समारोह (formToAdd, formsToRemoveFrom) { \t \t (formsToRemoveFrom में से वर) { \t \t \t \t $ (से) के लिए \t।removeData ("सत्यापनकर्ता"); \t \t \t} \t \t global.addValidationToForm (formToAdd); \t \t} ' –

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