2009-02-13 2 views
9

मैं एक अजीब समस्या जिससे ValidationSummary नहीं दिखाया जाता है की है। हालांकि, प्रमाणीकरण संदेश प्रदर्शित किया जा रहा है। मैंने आउटपुट पेज स्रोत की जांच की है और ऐसा नहीं है कि वे एक ऐसे रंग में हैं जो उन्हें अस्पष्ट कर रहा है। मैं आरसी का उपयोग कर रहा हूँ। कोई विचार?asp.net MVC - ValidationSummary नहीं प्रदर्शित

संपादित करें: तोड़ बिंदु ValidationSummary पर सेट दिखाता है:

ViewData.ModelState.Values[1].ErrorMessage = "" 
ViewData.ModelState.Values[1].Exception.InnerException.Message = "4a is not a valid value for Int32" 

करता ValidationSummary त्रुटिसंदेश और ValidationMessage InnerException.Message का उपयोग का उपयोग करें?

मेरा विचार कोड है:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<App.Models.PurchaseOrdersView>" %> 


<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
    <title>Edit</title> 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Edit</h2> 

    <%= Html.ValidationSummary() %> 

    <% Html.BeginForm("Edit", "PurchaseOrder", FormMethod.Post); %> 
    <table> 
     <tr> 
      <td> 
       Purchase Order Id: 
      </td> 
      <td> 
       <%= Html.TextBox("PurchaseOrderId", Model.PurchaseOrderId)%> 
       <%= Html.ValidationMessage("PurchaseOrderId")%> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Date: 
      </td> 
      <td> 
       <%= Html.TextBox("Date", Model.Date.ToString("dd-MMM-yyyy"))%> 
       <%= Html.ValidationMessage("Date")%> 
      </td> 
     </tr> 
    </table> 
    <input type="submit" value="Save" /> 

    <% Html.EndForm(); %> 

</asp:Content> 

उत्तर

6

आप कहते हैं कि क्या त्रुटियों प्रदर्शित नहीं कर रहे हैं, लेकिन कुछ त्रुटियां जो ValidationMessage में नहीं बल्कि ValidationSummary में प्रदर्शित किया जाएगा रहे हैं। मुझे लगता है कि यह रिलीज उम्मीदवार में एक बग है, लेकिन मैं अन्य व्याख्याओं के लिए खुला हूं।

string errorText = GetUserErrorMessageOrDefault(modelError, null /* modelState */); 

ध्यान दें कि कुछ भी नहीं modelState के लिए पारित कर दिया है: विशेष रूप से, ValidationSummary स्रोत कोड से इस लाइन पर विचार करें। अब जब कि ValidationMessage के विपरीत: अंत में

... GetUserErrorMessageOrDefault(modelError, modelState) ... 

, के GetUserErrorMessageOrDefault को देखो:

private static string GetUserErrorMessageOrDefault(ModelError error, ModelState modelState) { 
     if (!String.IsNullOrEmpty(error.ErrorMessage)) { 
      return error.ErrorMessage; 
     } 
     if (modelState == null) { 
      return null; 
     } 

     string attemptedValue = (modelState.Value != null) ? modelState.Value.AttemptedValue : null; 
     return String.Format(CultureInfo.CurrentCulture, MvcResources.Common_ValueNotValidForProperty, attemptedValue); 
    } 

यह क्या कहता है हमें है कि जब आप मॉडल राज्य के लिए एक त्रुटि जोड़ने आप एक कस्टम त्रुटि संदेश निर्दिष्ट करते हैं तो यह प्रदर्शित किया जाएगा। यदि, हालांकि, एक अपवाद जोड़ा गया है (AddModelError के लिए एक अधिभार है जो एक अपवाद लेता है, दूसरा जो स्ट्रिंग लेता है; स्ट्रिंग त्रुटि संदेश की तरह IDataErrorInfo काम करता है), यह केवल तभी प्रदर्शित होगा जब मॉडलस्टेट है गैर-शून्य, और फिर हम आपको अपवाद पर त्रुटि संदेश के बजाय एक सामान्य संदेश देंगे।

अद्यतन

करता ValidationSummary का उपयोग त्रुटिसंदेश और ValidationMessage InnerException.Message का उपयोग करें?

हां, यह कम या ज्यादा प्रभाव है। जैसे मैंने कहा, मुझे लगता है कि यह एक बग है। के रूप में here देखा

Update2

माइक्रोसॉफ्ट GetUserErrorMessageOrDefault समारोह अपडेट किया गया।

private static string GetUserErrorMessageOrDefault(HttpContextBase httpContext, ModelError error, ModelState modelState) 
    { 
     if (!String.IsNullOrEmpty(error.ErrorMessage)) 
     { 
      return error.ErrorMessage; 
     } 
     if (modelState == null) 
     { 
      return null; 
     } 

     string attemptedValue = (modelState.Value != null) ? modelState.Value.AttemptedValue : null; 
     return String.Format(CultureInfo.CurrentCulture, GetInvalidPropertyValueResource(httpContext), attemptedValue); 
    } 
+0

हाय क्रेग का प्रयास करें: PurchaseOrderId (पूर्णांक) और दिनांक (तारीख) के लिए मैं तार में प्रवेश किया। मैंने कस्टम त्रुटि संदेशों के साथ/बिना कोशिश की। मैं त्रुटियों को जोड़ने के लिए UpdateModel का उपयोग करता हूं। मैं एक n00b हूँ और मैं बस आप जो कह रहे हैं उसके बारे में बताता हूं। मैंने थोड़ा और जानकारी के साथ अपना प्रश्न अपडेट कर लिया है। –

+0

हाय मुझे यह भी लगता है कि यह एक बग है क्योंकि मेरा सत्यापन सारांश सभी त्रुटियों को प्रदर्शित नहीं कर रहा है लेकिन मेरे इन-लाइन सत्यापन संदेश हैं। मुझे लगता है कि यह बग एमवीसी 2 आरसी 2 में पेश किया गया था। – Naz

+1

लिंक माइक्रोसॉफ्ट के GetUserErrorMessageOrDefault में परिवर्तन टूटा हुआ प्रतीत होता है। इस लिंक को काम करना चाहिए: http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/f1511797ea32#src/System.Web.Mvc/Html/ValidationExtensions.cs – Jay

11

<%= Html.ValidationSummary(false) %> 
+2

पैरामीटर "बाहर निकालेंप्रकार प्रविष्टियां" है। तो इसे गलत पर सेट करना सुनिश्चित करता है कि संपत्ति त्रुटियों को सारांश में शामिल किया गया है। – AaronLS