9

मैं jQuery Mobile (Alpha 3)ASP.NET MVC 3 आधारित एमवीसी 3 के साथ आने वाले अविभाज्य सत्यापन का उपयोग कर रहा हूं। जब कोई पृष्ठ सीधे एक्सेस किया जाता है (यूआरएल में कोई हैश नहीं), सत्यापन पूरी तरह से काम करता है। हालांकि, जब आप पृष्ठ पर नेविगेट करते हैं, तो jQuery मोबाइल गतिशील रूप से लोड करने के लिए अजाक्स नेविगेशन का उपयोग करता है (यूआरएल में हैश प्रदर्शित करना) और सत्यापन कार्य करना बंद कर देता है।jQuery मोबाइल और अविभाज्य सत्यापन

मॉडल::

[Required(ErrorMessage = "Missing value")] 
[DisplayName("Property Display Name")] 
public int? PropertyName { get; set; } 

देखें (उस्तरा):

@Html.LabelFor(model => model.PropertyName) 
@Html.TextBoxFor(model => model.PropertyName) 
@Html.ValidationMessageFor(model => model.PropertyName) 

जेनरेट किए गए HTML:

यहाँ उपयोग में कोड का एक नमूना है

<label for="PropertyName">Property Display Name</label> 
<input data-val="true" data-val-number="The field Property Display Name must be a number." data-val-required="Missing value" id="PropertyName" name="PropertyName" type="text" value="" /> 
<span class="field-validation-valid" data-valmsg-for="PropertyName" data-valmsg-replace="true"></span> 

यह संभव है कि अन्य पृष्ठ पहले लोड हो चुके हैं और HTML तत्वों में अब अद्वितीय आईडी नहीं हैं। लेबल, टेक्स्टबॉक्स, और सत्यापन मैसेज के लिए HTML उत्पन्न करने के लिए अपने स्वयं के एचटीएमएल हेल्पर क्लास को रोल करने के अलावा, क्या इस परिदृश्य को संभालने का कोई तरीका है?

+0

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

+0

हमारे पास समान समस्याएं हैं, लेकिन हेवन ' यह बिल्कुल काम नहीं कर रहा है। हम जेक्यू 1.5 और जेक्यूएम 1.03 ए पर हैं। यहां पर संघर्ष .. – pavsaund

उत्तर

5

क्या आपने लोड की गई नई सामग्री के बाद jQuery.validator.unobtrusive.parse() पर कॉल किया था? ब्रैड विल्सन के ब्लॉग पर this post पढ़ें।

14

मैं इस मुद्दे के साथ थोड़ा संघर्ष कर रहा हूं, लेकिन @Zote ने मुझे सही दिशा में इंगित किया।

jQuery.validator.unobtrusive.parse("form") 

या

jQuery.validator.unobtrusive.parse(document) 

इस hooking के लिए सबसे अच्छा तरीका pageshow घटना JQMs के माध्यम से शायद है:

parse() जाना है, लेकिन एक चयनकर्ता यानी में पारित करने के लिए सुनिश्चित करें कि तरीका है। यह तो हर नए पेज संक्रमण के बाद ट्रिगर हो जाएगा, इसलिए की तरह, तुम भी ऐसा करने के लिए jqm से पहले pagebeforeshow घटना

$('div').live('pageshow',function(event){ 
    jQuery.validator.unobtrusive.parse(".ui-page-active form"); 
}); 

का उपयोग कर .ui-page-active का उपयोग करके द्वारा किया जाता है और साथ ही यह पृष्ठ पर जादू है चाहें, तो आप कर सकते हैं अपनी खोज को वर्तमान में सक्रिय पृष्ठ पर सीमित करें।

+1

इसे उत्तर के रूप में स्वीकार किया जाना चाहिए। JQuery 1.7 और jqm 1.2 के लिए नवीनतम कोड होगा: $ (दस्तावेज़) .on ('पेजिनिट', '#feedback_page', फ़ंक्शन (ई) { $। Validator.unobtrusive.parse ($ (this) .find (' फॉर्म ')); }); – TruMan1