के माध्यम से आंशिक लोड में काम नहीं कर रहा है, मैंने समस्या को दोहराने के लिए यहां एक छोटा सा उदाहरण दिया है। मैं एक जोरदार आंशिक दृश्य _Name.cshtml टाइप किया है:एमवीसी 3 रेजर @ एचटीएमएल। वैलिडेशन मैसेज jquery.load()
@model ValidationInPartial.ViewModels.MyViewModel
<h2>@ViewBag.Message</h2>
<fieldset>
<legend>Name</legend>
<div class="editor-label">
@Html.LabelFor(model => model.MyName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MyName)
@Html.ValidationMessageFor(model => model.MyName)
</div>
<a href="#" id="reload">Reload Name</a>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<script type="text/javascript">
$(document).ready(function() {
$("#reload").click(function() {
$("#divName").load("Home/NameReload");
});
});
</script>
है कि शुरू में भरी हुई है और मुख्य Index.cshtml
<div id="divForm">
@using (Html.BeginForm()) {
<div id="divName">
@Html.Partial("_Name")
</div>
}
</div>
क्षेत्र MyName की आवश्यकता है और सत्यापन आवश्यक विशेषता के माध्यम से कार्यान्वित किया जाता है के अंदर प्रदर्शित किया जाता है अगर आप मैदान खाली वैध छोड़ने बनाएं बटन पर क्लिक करें MyViewModel
namespace ValidationInPartial.ViewModels
{
public class MyViewModel
{
[Required(ErrorMessage = "Please enter a Name.")]
public string MyName { get; set; }
}
}
पेज के बाद में पहली बार भरी हुई है, आयन संदेश "कृपया एक नाम दर्ज करें।" क्षेत्र के बगल में दिखाता है और क्षेत्र स्वयं गुलाबी हो जाता है, जो अपेक्षित व्यवहार है। अब "पुनः लोड का नाम" लिंक है, जो एक ajax कॉल (jquery.load (...)) बनाता है, आंशिक पुनः लोड है पर क्लिक करके, यहाँ नियंत्रक कोड है:
public PartialViewResult NameReload()
{
MyViewModel myViewModel = new MyViewModel();
ViewBag.Message = "Name Reloaded";
return PartialView("_Name", myViewModel);
}
इस बार यदि आप क्लिक करें फ़ील्ड को खाली छोड़कर बटन बनाएं, सत्यापन संदेश फ़ील्ड के बगल में दिखाई नहीं देता है, हालांकि फ़ील्ड गुलाबी हो जाती है। यह पता चला है कि आंशिक @ html.ValidationMessageFor को पुनः लोड करते समय सत्यापन संदेश पहली बार प्रस्तुत नहीं करता है।
यहाँ jQuery फ़ाइलें है मैं
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
का उपयोग मुझे आश्चर्य है अगर इस तरह से एक बग है उस्तरा इंजन renders @ Html.ValidationMessageFor या कि jQuery के साथ एक समस्या है? कोई विचार क्यों ऐसा होता है?
मैंने कहीं भी पढ़ा है कि AJAX कॉल पृष्ठ के लिए सभी स्क्रिप्ट खो देता है, वास्तव में मुझे आंशिक के अंदर कोई जावास्क्रिप्ट कोड रखना होगा ताकि उन्हें फिर से प्रस्तुत किया जा सके और फिर से उपयोग किया जा सके।
इस बीच में मैं एक समाधान के लिए मैन्युअल रूप से आंशिक में प्रस्तुत करने के लिए क्या @ Html.ValidationMessageFor जो है द्वारा प्रदान की गई होने वाली थी है जिसमें पाया गया:
<span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="MyName"></span>
हालांकि इस समाधान का अर्थ है कि हम प्रकार बदल अगर ViewModel में आवश्यक विशेषता के अंदर सत्यापन या केवल सत्यापन संदेश के लिए, हमें दृश्य में इस हार्ड-कोडित टुकड़े को संशोधित करने की आवश्यकता है।
मैंने आंशिक दृश्य के शीर्ष पर यह पंक्ति जोड़ दी है, यह समस्या को हल करता है। अंत में इतना आसान है। बहुत - बहुत धन्यवाद। –
ऐसे कई उदाहरण हैं जहां लाइन डेवलपर ने नोट किया है, काम नहीं करेगा, जैसे आंशिक दृश्य प्राप्त करने के लिए AJAX का उपयोग करना। ऐसा होने का कारण यह है कि AJAX कॉल मान्य प्लगइन को पृष्ठ पर प्रपत्रों के लिए "rebind" करने के लिए ट्रिगर नहीं करता है, जो इसे नहीं करना चाहिए। इन मामलों में, $ .validator.unobtrusive.parse ('# myPartialViewForm') को कॉल करना आवश्यक है; तरीका। मेरे मामले में जब कोई उपयोगकर्ता "ऐड" बटन पर क्लिक करता है तो मैं एक फॉर्म प्रस्तुत करने के लिए फ़ैंक्सबॉक्स का उपयोग कर रहा हूं। मेरा आंशिक दृश्य "$ .validator.unobtrusive.parse ('# विज़ार्डफॉर्म') कहता है;" आंशिक दृश्य के लिए सत्यापन को कॉन्फ़िगर करने के लिए। –
दोस्त आप कमाल हैं! – Darren