2011-02-06 9 views
9

मुझे एएसपीनेट एमवीसी 3 एप्लिकेशन में क्लाइंट सत्यापन के साथ समस्या है।asp.net mvc3 jquery ui संवाद और क्लाइंट सत्यापन

मेरे कोड दिखता है:

function loadEditCategoryDialog(categoryId) { 
    $.ajax({ 
     url : "/rovastamp3/Admin/CategoryEditDialog", 
     data : "categoryId="+categoryId, 
     success : function(data){ 
      $("#popup_dialog").html(data); 
      $("#popup_dialog").dialog({   
       modal: true, 
       draggable: false, 
       resizable: false, 
       title: "Upravit kategorii", 
       width: 600, 
       height: 500, 
      });        
     } 
    }); 
} 

नियंत्रक:

[HttpGet] 
public ActionResult CategoryEditDialog(int categoryId) 
{ 
    CategoryEditViewModel categoryEditViewModel = new CategoryEditViewModel(); 
    categoryEditViewModel.Category = _postAuctionCategoryRepo.Query() 
     .SingleOrDefault(x => x.Id == categoryId); 

    return PartialView(categoryEditViewModel); 
} 

[HttpPost] 
public ActionResult CreateNewCategory(CategoryEditViewModel categoryEditViewModel) 
{ 
    if (ModelState.IsValid) 
    { 
     return RedirectToAction("Index"); 
    } 
    return View("CategoryEditDialog", categoryEditViewModel); 
} 

और अंत में मेरी आंशिक दृश्य:

@model Rovastamp.MVC3.ViewModels.AdminController.CategoryEditViewModel 
<h2>Upravit kategorii @Model.Category.Name</h2> 
@{Html.EnableClientValidation();} 
@using (Html.BeginForm("CreateNewCategory", "Admin")) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Objednávkový formulář</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Category.Name) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.Category.Name) 
      @Html.ValidationMessageFor(model => model.Category.Name) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Category.Position) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.Category.Position) 
      @Html.ValidationMessageFor(model => model.Category.Position) 
     </div> 

     <input type="submit" value="Upravit" class="submit_button" />    
    </fieldset> 
} 

मेरी web.config में मैं UnobtrusiveJavaScript और ClientValidatin एप्लिकेशन सेटिंग चालू ।

यदि मैं jquery ui संवाद पर सबमिट बटन पर क्लिक करता हूं, तो एमवीसी क्लाइंट सत्यापन के बिना पूर्ण ताज़ा करता है?

समस्या कहां है?

किसी भी मदद के लिए धन्यवाद

संपादित करें:

  • jquery.unobtrusive-ajax.js
  • jquery.validate.js
  • :

    मेरी लेआउट पेज में मैं इस स्क्रिप्ट में शामिल

  • jquery.validate.unobtrusive.js

संपादित 2

मेरी exemaple में मैं डाल:

jQuery.validator.unobtrusive.parse('#popup_dialog'); 

से पहले मैं फोन jQuery ui संवाद और ग्राहक सत्यापन पूरी तरह से काम करता है।

उत्तर

30

यह इसलिए है क्योंकि आप एक लोड कर रहे हैं PartialView को एक ऐसे दृश्य में देखें जिसे पहले से jquery.validator.unobstrusive लाइब्रेरी द्वारा पार्स किया गया है। आपको अपने इंजेक्शन वाले पार्टियल व्यू सत्यापन गुणों को ध्यान में रखने के लिए पृष्ठ को फिर से पार्स करने के लिए लाइब्रेरी को निर्देश देना होगा। विषय पर मेरा this blog post पढ़ें, यह उम्मीद है कि यह आपके प्रश्न का उत्तर देगा।

+0

बहुत बहुत धन्यवाद। यह काम करता है :) – Mennion

+0

+1 इच्छा है कि मैं आपको और अधिक डेविड बढ़ा सकता हूं। वास्तव में मुझे क्या चाहिए है। – gnome

+0

@gnome :) आप उसकी प्रोफ़ाइल खोल सकते हैं और अपने सभी उत्तरों और प्रश्नों को ऊपर उठा सकते हैं, सब कुछ संभव है – Omu

0

क्या आप क्लाइंट साइड सत्यापन के लिए उचित जावास्क्रिप्ट फाइलें शामिल कर रहे हैं?

चेक JavaScript कंसोल जब आप सबमिट कार्रवाई को अंजाम, मुझे यकीन है वहाँ एक त्रुटि है कि जावास्क्रिप्ट बाहर त्रुटि के लिए और उसके बाद प्रपत्र के डिफ़ॉल्ट प्रस्तुत कार्रवाई में लात है पैदा कर रहा है।

+0

अच्छा, इसे आज़माएं और कंसोल 0 त्रुटि दिखाएं। अजीब – Mennion

+0

आपको 'MicrosoftAjax.js' और ' MicrosoftMvcAjax.js' की आवश्यकता हो सकती है? मुझे यकीन नहीं है, यद्यपि। मुझे अभी तक अविभाज्य jquery तर्क का उपयोग करने का मौका नहीं मिला है। – TheRightChoyce

1

मैंने इस समस्या के साथ कड़ी मेहनत की, कई घंटों के बाद मैंने निष्कर्ष निकाला कि jQuery फॉर्म तत्व के बाहर डायलॉग एचटीएमएल तत्व प्रस्तुत करता है। JQuery के बाद से ।मान्यकरण प्लगइन केवल फार्म तत्व के भीतर काम करता है, यह पर्चा दायरे के अंदर संवाद वापस लौटने के लिए, यह निम्नलिखित खुला घटना से निपटने के द्वारा किया जा सकता आवश्यक है:

$('#dialogDivId').dialog({ 
     autoOpen: false, 
     width: 500, 
     height: 500, 
     minheight: options.minheight, 
     minwidth: options.minwidth, 
     modal:false, 
     open: function (type, data) { 
      $(this).appendTo($('form')); // reinsert the dialog to the form 
     } // And Solve your validation inside Jquery dialog 
}); 
+0

यह सही समस्या है, लेकिन यह संवाद UI के साथ हस्तक्षेप करता है। मैंने इसे हल किया: 'खुला: फ़ंक्शन (प्रकार, डेटा) { $ (यह) .wrap ("

"); } ' – codekaizen

3

इसके अलावा तरह अपने सबमिट बटन पर तारों को इसलिए

$("#SubmitButton").click(function(){ 
    if (!$("#editForm").valid()){ 
     return false; 
    } 
     }); 

आप पार्स करने के लिए विशिष्ट एचटीएमएल प्रपत्र की जरूरत है, यह मेरे लिए काम नहीं किया डिफ़ॉल्ट निर्माता का उपयोग कर।

$.validator.unobtrusive.parse("#editForm"); 

मैं एक तरह से यह पता लगाने की है ताकि आप अगर मैं एक रास्ता खोजने के लिए यहाँ पोस्ट करेंगे, ऊपर तार की प्रत्येक प्रत्येक प्रपत्र पर सबमिट बटन नहीं है कोशिश कर रहा हूँ।

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