एएसपी.नेट एमवीसी ढांचे में पोस्ट फॉर्म डेटा मान्य करना

मैं एएसपी.नेट एमवीसी फ्रेमवर्क के साथ खेल रहा हूं और एक चीज जो वास्तव में मुझे भ्रमित कर रही है वह है कि मैं पोस्ट फॉर्म डेटा के सर्वर साइड सत्यापन कैसे कर रहा हूं। मुझे लगता है कि मैं एक ही यूआरएल पर वापस पोस्ट नहीं करता हूं, लेकिन अगर मैं नहीं करता, तो मैं दर्ज डेटा और त्रुटि संदेशों के साथ फ़ॉर्म को फिर से कैसे चला सकता हूं? साथ ही, सत्यापन तर्क कहां जाना चाहिए? मॉडल या नियंत्रक में? यह उन कुछ क्षेत्रों में से एक प्रतीत होता है जहां वेब फॉर्म बहुत मजबूत हैं (मुझे सत्यापन नियंत्रण याद आती है)।

0
ro fr bn

6 उत्तर

एमवीसी में प्रवाह का एक सिंहावलोकन यहां दिया गया है:

  1. /new - render your "New" view containing a form for the user to fill out
    • User fills out form and it is posted to /create
    • The post is routed to the Create action on your controller
    • In your action method, update the model with the data that was posted.
    • Your Model should validate itself.
    • Your Controller should read if the model is valid.
    • If the Model is valid, save it to your db. Redirect to /show to render the show View for your object.
    • If the Model is invalid, save the form values and error messages in the TempData, and redirect to the New action again. Fill your form fields with the data from TempData and show the error message(s).

प्रमाणीकरण ढांचे इस प्रक्रिया में आपकी मदद करेंगे। साथ ही, मुझे लगता है कि एएसपी.नेट एमवीसी टीम अगले पूर्वावलोकन के लिए एक सत्यापन ढांचे की योजना बना रही है।

0
जोड़ा
लांस, उस अनुरोध के लिए विशिष्ट TempData बाल्टी है? स्पष्ट रूप से यह समस्याएं पैदा करेगा यदि यह सत्र आधारित था और एकाधिक अनुरोध एक ही बाल्टी में डेटा स्टोर करने का प्रयास कर रहे थे। इसके अलावा, TempData एक हैक का उपयोग कर रहा है? क्या इस तरह अन्य एमवीसी ढांचे समस्या को हल करते हैं?
जोड़ा लेखक Ben Mills, स्रोत
TryUpdateModel() आपका फॉर्म डेटा लेगा, और इसे अपने ऑब्जेक्ट में डालने का प्रयास करेगा। ऑब्जेक्ट प्रकार की बजाय अपने नियंत्रक के लिए पैरामीटर के रूप में फॉर्मडाटा का उपयोग करें। दूसरा विकल्प कस्टम मॉडल बाइंडर बनाना होगा। यहां और अधिक: hanselman.com/blog/…
जोड़ा लेखक Lance Fisher, स्रोत
अच्छा सारांश! इसके साथ मुझे मिली एकमात्र समस्या यह है कि मैं डेटा प्रकार को सत्यापित करने में सक्षम होना चाहता हूं और मैं इसे मॉडल के रूप में फॉर्म डेटा पास करने से पहले ऐसा नहीं कर सकता क्योंकि यह इसे बनाते समय अपवाद फेंक देगा। क्या इसके चारों ओर एक अच्छा तरीका है?
जोड़ा लेखक bobwah, स्रोत
उत्कृष्ट सारांश! एक उदाहरण के साथ महान होगा
जोड़ा लेखक Cherian, स्रोत

Have you taken a look at this? http://www.codeplex.com/MvcValidatorToolkit

पेज से उद्धृत

वैलिडेटर टूलकिट एक सेट प्रदान करता है   नए एएसपी.नेट एमवीसी के लिए वैधकर्ताओं का   HTML फॉर्म को मान्य करने के लिए ढांचा   क्लाइंट और सर्वर-साइड का उपयोग कर   सत्यापन सेट।

मुझे डर है कि मेरे से किसी और एमवीसी-समझदार को आर्किटेक्चर में कहां रखना चाहिए, आपको बात करनी होगी।

0
जोड़ा
मैंने कोडप्लेक्स प्रोजेक्ट पर एक नज़र डाली, लेकिन मैंने जो देखा (उस समय) से मैं प्रभावित नहीं था। शायद यह अब बेहतर है। मैं एक और लुक ले जाऊंगा। जाहिर है, जेफ और टीम को स्टैक ओवरफ्लो में फॉर्म डेटा को सत्यापित करना होगा। जब मैं एक प्रश्न पूछें पृष्ठ के लिए HTML को देखता हूं, तो ऐसा लगता है कि पृष्ठ पोस्ट स्वयं ही वापस आते हैं। मुझे आश्चर्य है कि वे सत्यापन को कैसे कार्यान्वित कर रहे हैं।
जोड़ा लेखक Ben Mills, स्रोत

मैं सिर्फ एमवीसी फ्रेमवर्क सीख रहा हूं इसलिए मुझे यकीन नहीं है कि यह कैसे बंद है, लेकिन जो मैं समझता हूं उससे आपके पास एडिट.एएसपीएक्स जैसे दृश्य पर एक फॉर्म होगा। इस फॉर्म को नियंत्रक को अन्य क्रिया विधि जैसे पोस्ट (जैसे) को उस फॉर्म की सामग्री में पास करने के लिए पोस्ट किया जाएगा जिसे आपने Edit.aspx में पैरामीटर के रूप में सेट किया है।

Update(int id, string name, string foo)

आप उस विधि के भीतर सत्यापन कर सकते हैं। अगर सब ठीक है,

return View("Item", yourObject)
0
जोड़ा

There is Castle.Components.Validator module in Castle project. It's very agile and powerfull. It generates validation rules based on model attributes (or any other source) and even able to generate JS validation using jQuery, Prototype Validation, fValidate and other. Of course it's wise to abstract validator away behind IValidationEngine interface.

0
जोड़ा

आप ASP.Net prev 5 के लिए स्कॉटगु की नवीनतम पोस्ट पर एक नज़र डालना चाहेंगे। यह एक सत्यापन नमूना के माध्यम से चलता है जो बहुत ही रोचक है:

http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx

0
जोड़ा

जहां तक ​​मैं सभी को बता सकता हूं कि अभी भी इसे करने के "मानक" तरीके को समझने की कोशिश कर रहा है। उस ने निश्चित रूप से एमवीसी पर फिल हैक और स्कॉट गुथरी की नवीनतम पोस्टों की जांच की और आपको कुछ दिलचस्प जानकारी मिलेगी कि उन्होंने कैसे किया। जब मैं अपने साथ अपने साथ खेल रहा था तो मैंने लिनक्सोक्ल डेटा डेटा के लिए मॉडलबिन्डर बनाया था जिसे मैंने उत्पन्न किया था। बुनियादी मॉडलबिन्डर को एक साथ कैसे रखा जाए, यह जानने के लिए आप इस पोस्ट को देख सकते हैं:

एएसपी.NET एमवीसी मॉडल बाइंडर

यदि आपने "उत्पाद" मॉडलबिंडर बनाया था तो आप अपनी कार्रवाई में ही इस तरह की कार्रवाई की घोषणा करेंगे:

सार्वजनिक एक्शन रिसेट न्यू (उत्पाद प्रोड)

और मॉडल बाइंडर ऑब्जेक्ट गुणों पर पोस्ट किए गए डेटा को तब तक असाइन करने का ख्याल रखेगा जब तक आप इसे वैसे भी बनाते हैं।

उसके बाद आपके GetValue() विधि के भीतर आप जो भी सत्यापन चाहते हैं उसे कार्यान्वित कर सकते हैं, चाहे अपवाद, रेगेक्स, या जो भी आप कॉल कर सकते हैं:

(ModelStateDictionary_name) .ddModelError ("form_element_id", "enter_value", "error_message");

Then you can just throw a <%= Html.ValidationSummary() %> in your view to display all your errors.

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

0
जोड़ा