2011-06-07 13 views
5

मेरे ऑर्चर्ड प्रोजेक्ट के लिए, मुझे पंजीकरण समय पर उपयोगकर्ता से कुछ अतिरिक्त जानकारी चाहिए। (कहें, पहला नाम, अंतिम नाम, पैंट रंग)। पंजीकरण के दौरान यह जानकारी दर्ज की जानी चाहिए और बाद में स्थगित नहीं किया जा सकता है (ग्राहक के आदेश के अनुसार)।बाग: कस्टम पंजीकरण फ़ील्ड

मैंने उन लोगों से पूछने के लिए प्रोफ़ाइल और विस्तारित पंजीकरण प्लगइन का उपयोग करने का प्रयास किया, लेकिन जहां तक ​​मैं देखता हूं, यह केवल मुझे पंजीकरण फॉर्म में प्रदर्शित करने के लिए वैकल्पिक फ़ील्ड देता है। क्या अनिवार्य फ़ील्ड पेश करने का कोई तरीका है?

मैं भी AccountController के Register विधि को अधिलेखित करने, प्रति this discussion के रूप में एक त्वरित धावा किया था, लेकिन मैं यह काम करने के लिए नहीं मिल सका: नियंत्रक एक अलग जगह में है, यह subclassed नहीं किया जा सकता और यहां तक ​​कि अगर मैं मजबूर यह करने के लिए, कोड कभी निष्पादित नहीं किया जाता है। मुझे लगता है कि वे ऑर्चर्ड के एक पुराने संस्करण का उपयोग कर रहे हैं।

तो, ऑर्चर्ड दर्शन के नजदीक एक अनिवार्य क्षेत्र बनाने के लिए मुझे किस दिशा में जाना चाहिए? क्या मुझे एक नया फ़ील्ड प्रकार बनाना चाहिए जो खाली मूल्यों को अस्वीकार कर दे? (क्या यह भी संभव है)?

उत्तर

6

मैंने उसी आवश्यकता के कारण विस्तारित पंजीकरण मॉड्यूल लिखा था। आपको एक कस्टम पार्ट बनाने की आवश्यकता है, उदाहरण: MyRegistrationPart। फिर आप उस भाग को उपयोगकर्ता सामग्री प्रकार में जोड़ते हैं। अपने हिस्से में केवल अनिवार्य है कि किसी भी संपत्ति के लिए [आवश्यक] विशेषता (डेटा एनोटेशन) जोड़ें। पंजीकरण तब तक सफल नहीं होगा जब तक कि उन अनिवार्य मूल्यों को भर दिया नहीं गया है!

आशा है कि यह अभी स्पष्ट है।

+0

धन्यवाद, यही वह है जो मैंने किया। ओह और उस मॉड्यूल को लिखने के लिए बहुत बहुत धन्यवाद। – winsmith

3

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

public class Routes : IRouteProvider 
{ 
    public void GetRoutes(ICollection<RouteDescriptor> routes) 
    { 
     routes.AddRange(GetRoutes()); 
    } 

    public IEnumerable<RouteDescriptor> GetRoutes() 
    { 
     return new[] { 
      new RouteDescriptor { 
       // Make sure to be higher than the default 
       Priority = ##### PRIORITY HERE (int) ######, 
       Route = new Route(
       "Users/Account/Register", 
       new RouteValueDictionary { 
        {"area", "#### YOUR MODULE AREA HERE ####"}, 
        {"controller", "#### YOUR ACCOUNT CONTROLLER HERE ####"}, 
        {"action", "#### YOUR REGISTER ACTION HERE ####"} 
       }, 
       new RouteValueDictionary(), 
       new RouteValueDictionary { 
        {"area", "#### YOUR MODULE AREA HERE ####"} 
       }, 
       new MvcRouteHandler()) 
      } 
     }; 
    } 
} 
+0

मैं जोड़ सकता हूं कि वास्तव में नियंत्रक विधि को ओवरराइड करने का प्रयास करना बहुत परेशानी है और शायद इसके लायक नहीं है। आज मैंने सीखा ... – winsmith

+0

धन्यवाद इवान! मैंने इस विधि का उपयोग उपयोगकर्ताओं/खाते/AccessDenied के मार्ग को "ओवरराइट" करने के लिए किया था, इसलिए मैं लॉगिन पेज के प्रतिपादन को स्वयं संभाल सकता था। साथ ही, ऐसा लगता है कि ऑर्चर्ड 1.4 वास्तविक लॉगिन को संभालने के लिए ऑर्चर्ड लोकल/उपयोगकर्ता/खाता/लॉगऑन पथ का उपयोग करता है। –

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