2010-12-05 33 views
53

मेरे पास नीचे रेज़र पेज पर लिंक है।रेजर एक्शनलिंक autogenerating? लंबाई = 7 यूआरएल में?

@Html.ActionLink("Create New Profile", "Create", "Profile", new { @class="toplink" }) 

मैं पृष्ठ दृश्य स्रोत है जो जब मैं लिंक पर क्लिक करें नीचे

<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a> 

है देखते हैं। यूआरएल नीचे की तरह है।

http://localhost:54876/admin/profile/create?length=7 

मुझे नहीं चाहिए? लंबाई = 7। यह ऑटो जनरेट क्यों है।

+0

यह आपके मार्गों के साथ कुछ करना होगा। डिफ़ॉल्ट रूप से, 'एक्शनलिंक' को '/ प्रोफ़ाइल/बनाएं' का एक href उत्पन्न करना चाहिए। जहां 'प्रोफ़ाइल' नियंत्रक तर्क है, और' बनाएँ 'क्रिया विधि तर्क है। तथ्य यह है कि href में 'admin' डाला जा रहा है इस मुद्दे पर प्रकाश डाला गया है। क्या आप अपने मार्ग दिखा सकते हैं? – RPM1984

उत्तर

85

ActionLink ओवरराइड आप (string linkText, string actionName, Object routeValues, Object htmlAttributes) ओवरराइड पर मैचों का उपयोग कर रहे हैं। तो आपका "प्रोफाइल" मान routeValues पैरामीटर पर पास किया जा रहा है। इस पैरामीटर के संबंध में इस फ़ंक्शन का व्यवहार सभी सार्वजनिक गुणों को लेना और लिंक उत्पन्न करने के लिए उपयोग किए गए मार्ग मानों की सूची में जोड़ना है। चूंकि स्ट्रिंग में केवल एक सार्वजनिक संपत्ति (लंबाई) होती है जिसे आप "लंबाई = 7" के साथ समाप्त करते हैं।

सही अधिभार आप उपयोग करना चाहते (string linkText, string actionName, string controllerName, Object routeValues, Object htmlAttributes) है और आप इसे इतना लोके फोन:

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"}) 
+0

क्या आप मेरे लिए स्पष्टीकरण दे सकते हैं ... इस संरचना का उपयोग करके, मेरा लिंक '~/खाता/प्रबंधित /' के रूप में उत्पन्न होता है ... मुझे अपने पैरामीटर के बाद खाली 'नया {}' रखना था, लेकिन अब यह '~/खाता/प्रबंधित/उपयोगकर्ता = ऑर्टंड 'जबकि मैं '~/खाता/प्रबंधन/ऑर्टंड' चाहता हूं ... मुझे वहां नहीं लग रहा है और समझ में नहीं आता क्यों – Ortund

+0

मजेदार बात यह है कि आधिकारिक एमवीसी बोलीरप्लेट इस अधिभार का दुरुपयोग करता है डिफ़ॉल्ट रूप से "पासवर्ड भूल गए" लिंक बनाते समय। इसे बदलना पड़ा। –

7

मुझे यकीन है कि इस का सही कारण नहीं कर रहा हूँ, लेकिन के लिए इसे बदल:

@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" }) 

जब आप पिछले पैरामीटर को बंद रखना होगा मैं नहीं जानता कि जो ओवरलोड MVC उठा (htmlattributes जोड़ा एक है), लेकिन यह इसे ठीक करेगा। इन दिनों में से एक मैं जांच करूँगा और पता लगाएगा कि क्या हो रहा है।

+0

इस तरह के मेरे लिए काम किया, लेकिन मैं अभी भी एक बम लिंक के साथ समाप्त हुआ ... मुझे '~/खाता/प्रबंधित/उपयोगकर्ता = ऑर्टंड 'मिला है जबकि मुझे जो चाहिए वह' ~/खाता/प्रबंधित/ऑर्टंड ' – Ortund

+0

है बस शून्य का उपयोग करें। कम से कम यही वह है जो मैं हमेशा उपयोग करता हूं। –

0

नोट करने के लिए एक और बात, जब से तुम @ActionLink में नियंत्रक परिभाषित कर रहे हैं, जो आप सब करने की ज़रूरत नहीं हो सकता है उदाहरण के लिए, यह देखते हुए कि आपका "नया प्रोफ़ाइल बनाएं" @ActionLink "/admin/profile/index.cshtml" हो सकता है, जो एक दृश्य है जो मौजूदा प्रोफाइल सूचीबद्ध करता है, इस मामले में, आपको नियंत्रक को परिभाषित करने की आवश्यकता नहीं है @ActionLink@ActionLinkProfileController के सापेक्ष पहले से ही संबंधित है, इसलिए आपका @ActionLink

हो सकता है
@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" }) 

मैं null बजाय new{} इस्तेमाल किया के रूप में चिह्नित जवाब करता है, मुझे लगता है कि यह अधिक उपयुक्त है अपने आप को। एक्शनलिंक अधिभार अब तक की सबसे सरल चीज नहीं है।