2012-03-09 21 views
5

सर्वर साइड सत्यापन बहुत अच्छा काम करता है लेकिन क्लाइंट साइड कुछ क्षेत्रों पर काम नहीं करेगा।एमवीसी 3 क्लाइंट साइड सत्यापन अनियमित/असंगत

का उपयोग करना:

"jquery-1.5.1.min.js" 
"modernizr-1.7.min.js" 
"jquery.validate.min.js" 
"jquery.validate.unobtrusive.min.js". 

एचटीएमएल 5 अर्थ मार्कअप

MVC3, रेजर, कोड पहले

कक्षा डाटा एनोटेशन

using System.ComponentModel.DataAnnotations; 

[Required, MaxLength(30, ErrorMessage = "First Name must be {1} characters or less")] 
public string FirstName { get; set; } 

[Range(20, 50, ErrorMessage = "{0} must be between {1} and {2}")] 
public double Waist { get; set; } 

दृश्य:

दृढ़ता से टाइप किया गया है।

@using (Html.BeginForm()) { @Html.ValidationSummary(true) 

    <span class="editor-label"> First Name </span> 

    <span class="editor-field"> 

    @Html.EditorFor(model => model.FirstName) 

    @Html.ValidationMessageFor(model => model.FirstName) 

    </span><br /><br /> 

    <span class="editor-label">@Html.LabelFor(model => model.Waist): 20 to 50</span> 

    <span class="editor-field"> 

    @Html.EditorFor(model => model.Waist) 

    @Html.ValidationMessageFor(model => model.Waist) 

    </span><br /><br /> 

ग्राहक पक्ष सत्यापन कमर के लिए काम करता है लेकिन फर्स्टनाम नहीं। सर्वर पक्ष दोनों के लिए काम करता है।

जब मैं स्रोत कोड को देखता हूं तो कमर के पास डेटा-वैल-रेंज होती है।

डेटा-वैल दूरी = "कमर होना चाहिए 20 और 50 के बीच"

वहाँ प्रथम नाम के लिए कोई डेटा-वैल दूरी है।

किसी भी मदद की बहुत सराहना की।

धन्यवाद,

जो

मैं IE9 64 बिट का उपयोग कर रहा हूँ।

आगे की जांच के बाद आवश्यक और स्ट्रिंग लंबाई आंशिक रूप से काम करती है। मैंने डेटामैटेशन विशेषताओं को इसमें बदल दिया।

[Required(ErrorMessage = "First Name is required")]  [StringLength(30, MinimumLength = 2, ErrorMessage = "First Name must be {2} to {1} characters")]  public string FirstName { get; set; } 

अब जब मैं अपने संपादन दृश्य पर जाता हूं और फर्स्टनाम टेक्स्टबॉक्स और टैब को साफ़ करता हूं तो मुझे कोई सत्यापन त्रुटि नहीं मिलती है। यदि मैं एक वर्ण दर्ज करता हूं तो मुझे स्ट्रिंग लम्बाई संदेश मिलता है, जब मैं बाद में फ़ील्ड को साफ़ करता हूं तो मुझे आवश्यक संदेश मिलता है। करीब आना लेकिन यह अभी भी सही ढंग से काम नहीं कर रहा है। जब मैं StringLength

+0

यह अपठित सूचना ईमेल के लिए एक परीक्षण है। –

उत्तर

5

MaxLength और MinLength का उपयोग ग्राहक साइड सत्यापन के साथ काम नहीं करता है

डेटा-वैल-लंबाई = स्रोत में जुड़ जाता है। आप StringLength बजाय इस्तेमाल कर सकते हैं:

[Required] 
[StringLength(30, ErrorMessage = "First Name must be {1} characters or less")] 
public string FirstName { get; set; } 

और वहाँ एक MinimumLength संपत्ति यदि आप MinLength विशेषता अनुकरण करना चाहता था आप सेट कर सकते हैं कि क्या है:

[Required] 
[StringLength(30, MinimumLength = 10, ErrorMessage = "First Name must be between 10 and 30 characters")] 
public string FirstName { get; set; } 

अद्यतन:

ऐसा लगता है कि फॉर्म जमा नहीं होने पर भी आप उत्सुकता से सत्यापन को ट्रिगर करना चाहते हैं।आपको लगता है कि प्राप्त करने के लिए निम्न स्क्रिप्ट जोड़ सकते हैं:

<script type="text/javascript"> 
    $(function() { 
     var settngs = $.data($('form')[0], 'validator').settings; 
     settngs.onfocusout = function (element) { $(element).valid(); }; 
    }); 
</script> 

अद्यतन 2:

यहाँ एक पूर्ण उदाहरण है। इंटरनेट टेम्पलेट का उपयोग कर एक नया एएसपी.नेट एमवीसी 3 प्रोजेक्ट बनाएं।

मॉडल:

public class MyViewModel 
{ 
    [Required(ErrorMessage = "First Name is required")] 
    [StringLength(30, MinimumLength = 2, ErrorMessage = "First Name must be {2} to {1} characters")] 
    public string FirstName { get; set; } 
} 

नियंत्रक:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel 
     { 
      FirstName = "foo" 
     }); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return View(model); 
    } 
} 

दृश्य:

@model MyViewModel 

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(function() { 
     var settngs = $.data($('form')[0], 'validator').settings; 
     settngs.onfocusout = function (element) { $(element).valid(); }; 
    }); 
</script> 

@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.FirstName) 
    @Html.ValidationMessageFor(x => x.FirstName) 
    <button type="submit">OK</button> 
} 
+0

धन्यवाद डारिन लेकिन कोई भी काम नहीं करता है। इसके अलावा आवश्यक विशेषता भी काम नहीं कर रही है। और रेंज विशेषता काम नहीं करती है अगर आप एक और फ़ील्ड संपादित करते हैं जहां सत्यापन विफल रहता है। किसी के पास एमवीसी सत्यापन में बग के बारे में एमएस से कोई जानकारी है? – Joe

+0

@ जो, ऐसी बग के बारे में कोई जानकारी नहीं है। वे गुण क्लाइंट साइड सत्यापन के साथ मेरे लिए बिल्कुल ठीक काम करते हैं। मैंने बिना किसी समस्या के उन्हें कई बार इस्तेमाल किया है। –

+0

वे आंशिक रूप से काम करते हैं। मेरी अद्यतन पोस्ट का अंत देखें। वे पहली बार काम नहीं करते हैं। – Joe

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