2009-06-24 6 views
20

के साथ काम करना बंद कर देता है मैं एक रेगेक्स सत्यापनकर्ता द्वारा फॉर्म फ़ील्ड में "<" वर्ण को अवरुद्ध करना चाहता हूं।एएसपी.नेट एमवीसी वैलिडेट इनपुट (झूठा) xVal और [RegularExpression] DataAnnotation

चरण 1:: मैं 3 चरणों में समस्या का वर्णन करेंगे जब मैं एक क्षेत्र "<" चरित्र युक्त के साथ एक फ़ॉर्म सबमिट करने का प्रयास करते हैं, मैं "संभावित खतरनाक अनुरोध ..." - में अपेक्षा के अनुरूप ASP.NET।

चरण 2: ASP.NET के RequestValidation बचने के लिए, मैं के साथ नियंत्रक में मेरी अद्यतन विधि को सजाने "[ValidateInput (गलत)]"।

यह अपेक्षित काम करता है - अब मैं त्रुटि के बिना "<" चरित्र पोस्ट कर सकता हूं।

चरण 3: मैं डेटा एन्नोटेशन के साथ xVal का उपयोग करता हूं। उदाहरण के लिए, [आवश्यक] या [स्ट्रिंग लम्बाई (255)] अपेक्षित के रूप में काम करता है।

लेकिन जब मैं का उपयोग करें: [रेग्युलर ऍक्सप्रैशन ("। विशेष वर्ण की अनुमति नहीं है" "^ [^ <>] * $", त्रुटिसंदेश =)], मैं "संभावित dangeros अनुरोध मिलता है ... "ValidateInput (false)] निर्देश के बावजूद, फिर से त्रुटि

क्या हो रहा है? क्या Regex validaton के लिए कोई आसान तरीका है, लेकिन [ValidateInput (false)] जगह पर? बेशक, मैं मॉडल में अपना सत्यापन कोड रखना चाहता हूं, नियंत्रक में नहीं।

+2

यह देखते हुए कि एसओ कम्युनिटी बॉट ने इसे शीर्ष पर धक्का दिया है, क्या आप यह पुष्टि कर सकते हैं कि यह अभी भी एक मुद्दा है या नहीं? –

+2

नहीं, यह एमवीसी 1 + xVal में एक इंस्यू था। एमवीसी 2 में सत्यापन मान्य के रूप में काम करता है (और अब xVal की कोई आवश्यकता नहीं है)। – Alex42

उत्तर

0

नहीं में web.config

<httpRuntime requestValidationMode="2.0" /> 

में इस लाइन रखो यह परिवर्तन है, यह MVC 1 + xVal में एक मुद्दा था। MVC 2 में मान्यता चाहिए रूप में काम करता है (और वहाँ xVal की कोई जरूरत अब नहीं है) - Alex42

लगता बॉट की तरह अभी भी शीर्ष को यह एक धक्का रहती है। क्या आप एक उत्तर को स्वीकृत के रूप में चिह्नित कर सकते हैं ताकि यह जान सके?

0

मैं xVal & nhibernate.validator का उपयोग कर रहा हूं और मैंने इस व्यवहार को पुन: उत्पन्न करने की कोशिश की लेकिन वैधकर्ता क्लाइंट पक्ष में बंधे हुए हैं, इसलिए मुझे क्लाइंट साइड सत्यापन के पिछले मूल्य का मूल्य नहीं मिला। जब मैंने जावास्क्रिप्ट को अक्षम कर दिया, तो यह सर्वर पक्ष सत्यापन के लिए मिला, और नियमित अभिव्यक्ति सत्यापनकर्ता द्वारा पकड़ा गया था।

मैंने डेटा एनोटेशन सत्यापन गुणों और मॉडल बाइंडर का उपयोग करने के साथ एक ही चीज़ की कोशिश की और यह भी इसे अतीत बना दिया।

उस पर कुछ और होना चाहिए जो त्रुटि उत्पन्न कर रहा है। क्षमा करें मैं और अधिक सहायक नहीं हो सकता!

0

this method के साथ एक साधारण नियम का उपयोग करके सत्यापन करने का प्रयास करें। यह कम से कम समीकरण से xVal को खत्म कर सकते हैं। समस्या तो बनी रहती है मैं सुझाव देंगे यह से संबंधित है या तो:

  • MVC के डिफ़ॉल्ट मॉडल बाइंडर
  • या आपकी का उपयोग है कि किसी तरह एक अपवाद की इजाजत दी है विज्ञप्ति में MVC दृश्य इंजन के साथ एक समस्या है के कार्यान्वयन विशेषता आप < मान्य द्वारा निर्दिष्ट किए जाने के लिए जब यह shoudn't
0

होगा अगर यह सिर्फ एक क्षेत्र, तो आप सिर्फ एक नियमित एक चरित्र '< या>' के लिए देखो और इसे हटाने के लिए लिख सकते हैं। आप इसे सबस्ट्रिंग का उपयोग करके प्राप्त कर सकते हैं। उम्मीद है कि इस इस परीक्षण किया जा करने में मदद करता पाठ की लंबाई के लिए पाश के लिए

  • उपयोग (के लिए (int i = 1, मैं < = text.length, ++))
  • (प्रत्येक चरित्र 1 शुरुआत की पुष्टि जैसे ch = पाठ।सबस्ट्रिंग (i, 1)
  • जोड़े जाने वाले प्रत्येक को छोड़कर '< या>'
0

मुझे लगता है स्थिर विधि Escape() आप के लिए इस का समाधान होगा स्ट्रिंग tmp के लिए चरित्र पढ़ें।

Regex r = new Regex(Regex.Escape(expression));