6

मेरे पास एक उपयोगकर्ता के खाते बनाने के लिए एक एमवीसी 4 इंटरनेट एप्लीकेशन है। फॉर्म सत्यापन काम करता है लेकिन इनपुट मान्य होने में विफल रहता है, कोई त्रुटि संदेश प्रदर्शित नहीं होता है। यह अभी भी जब तक मान्यता समस्या हल हो गया है प्रस्तुत करने से बचाता है, लेकिन कोई पाठग्राहक सत्यापन संदेश नहीं दिखा रहा है

उस्तरा देखें फार्म

<h2>Create New Account</h2> 
<fieldset> 
    <legend></legend> 
    @using (Html.BeginForm("CreateUser",null)){ 
     @Html.AntiForgeryToken() 
     <table class="create"> 
      <tr> 
       <td colspan="2"><b>New Account</b> 
      </tr> 
      <tr> 
       <td>@Html.DisplayNameFor(model=>model.UserName)</td><td>@Html.TextBoxFor(model=>model.UserName)</td> 
       <td>@Html.DisplayNameFor(model=>model.EmailAddress)</td><td>@Html.TextBoxFor(model=>model.EmailAddress)</td> 
       <td><input type="submit" value="Create User" /></td> 
      </tr> 
     </table> 
    } 
</fieldset> 
    @Html.ValidationSummary() 

बंडलों का इस्तेमाल किया है मान्यता फ़ाइलों

bundles.Add(new ScriptBundle("~/bundles/asset").Include(
      "~/Scripts/jquery-{version}.js", 
      "~/Scripts/jquery-ui-{version}.js", 
      "~/Scripts/jquery.validate*", 
      "~/Scripts/jquery.unobtrusive*")); 

शामिल इस्तेमाल किया मॉडल एक इकाई मॉडल है , मैंने सत्यापन आवश्यकताओं को एनोटेट करने के लिए आंशिक कक्षा जोड़ा है

[MetadataType(typeof(UserProfileMetadata))] 
public partial class UserProfile 
{ 
    //Empty Class just required for adding class level attribute 
} 

public class UserProfileMetadata 
{ 
    //Fields from user profile requiring annotations 
    [EmailAddress] 
    [Required] 
    [Display(Name = "Email Address")] 
    public string EmailAddress { get; set; } 

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

} 

प्रमाणीकरण काम कर रहा है लेकिन अब संदेश दिखा रहा है मुझे लगता है कि यह एक मार्कअप त्रुटि होना चाहिए लेकिन मैं इसे देख नहीं सकता।

+3

आपने फ़ॉर्म में मान्यता सारांश चलती की कोशिश की है? भी, वैधताएं परिणाम के साथ पॉप्युलेट नहीं हो जाएंगी जब तक सबमिट – Slicksim

+0

* फेसप्लम * हां पर क्लिक नहीं किया गया है, समस्या में फॉर्म के साथ सारांश था। एक समाधान के रूप में इसे फायर करें और मैं इसे स्वीकार करूंगा। लगभग 40 मिनट तक इसे देखकर बस इसे नहीं देखा! – James

+0

मैंने वही किया है, मुझे एक दिन मेरे चेहरे के हथेलियों से काली आंख मिल जाएगी :) – Slicksim

उत्तर

13

फॉर्म के अंदर प्रमाणीकरणसमरी को स्थानांतरित करना इसे ठीक करेगा।

<h2>Create New Account</h2> 
<fieldset> 
    <legend></legend> 
    @using (Html.BeginForm("CreateUser",null)){ 
     @Html.ValidationSummary() 
     @Html.AntiForgeryToken() 
     <table class="create"> 
      <tr> 
       <td colspan="2"><b>New Account</b> 
      </tr> 
      <tr> 
       <td>@Html.DisplayNameFor(model=>model.UserName)</td> <td>@Html.TextBoxFor(model=>model.UserName)</td> 
      <td>@Html.DisplayNameFor(model=>model.EmailAddress)</td><td>@Html.TextBoxFor(model=>model.EmailAddress)</td> 
      <td><input type="submit" value="Create User" /></td> 
     </tr> 
    </table> 
} 
</fieldset> 
5

इस इच्छा नहीं है, जो भर में ठोकर किसी के लिए, के रूप में @Html.ValidationSummary चलती करने के लिए प्रतिबंधित करने के लिए किया जा अर्थात यह _Layout.cshtml में रहती है, और आप इसे वहाँ हैं, तो यहां कि चारों ओर एक तरीका है।

नीचे दी गई विधि स्पष्ट रूप से माइक्रोसॉफ्ट द्वारा @Html.ValidationSummary को पॉप्युलेट करने के लिए उपयोग की जाती है। इसके मानक रूप में, यह में data-valmsg-summary-true देखता है। इस मामले में this कॉलिंग फॉर्म है। खैर, मेरा @Html.ValidationSummary इसे DRY रखने के लिए _Layout.cshtml पर pageBody<div> में रहता है।

var container = $('this').find("[data-valmsg-summary=true]") 
इस के लिए

:

function onErrors(event, validator) { // '#pageBody' is the containing element 
    var container = $('#pageBody').find("[data-valmsg-summary=true]"), 
    list = container.find("ul"); if (list && list.length && validator.errorList.length) { 
     list.empty(); container.addClass("validation-summary-errors").removeClass("validation-summary-valid"); 
     $.each(validator.errorList, function() { 
      $("<li />").html(this.message).appendTo(list); 
     }); 
    } 
} 

अब तक, मैं केवल यह बदल दिया है

var container = $('#pageBody').find("[data-valmsg-summary=true]") 

अब, मैं एक बटन क्लिक से मेरी मान्यता ट्रिगर। यहाँ तक कि जब jQuery.unobtrusive का उपयोग कर भरता

$('#btnSave').click(function() { 
     if ($('form').valid()) { 
      // Do stuff 
     } else { 
      onErrors(event, $('form').data('validator')); 
     } 
    }); 

देखा, @ Html.ValidationSummary: आग onErrors(event, validator) पाने के लिए, मैं निम्नलिखित jQuery का इस्तेमाल किया।

सही दिशा यहाँ में ओर इशारा करते हुए के लिए Leniel Macaferi लिए बहुत बहुत धन्यवाद: http://www.leniel.net/2013/08/customizing-aspnet-mvc-html-validation-summary-with-bootstrap-3-panel.html#sthash.jGRguVuV.qSjYUlhS.dpbs

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