2011-04-06 14 views
47

मैं हैश मान लागू करने के लिए यानी यूआरएल इस तरह दिखना चाहिए की जरूरत सहित:ASP.NET MVC यूआरएल मार्गों में हैश मान

/घर/सूचकांक/# बनाने

इसके लिए जोड़ लिया है एक मार्ग:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/#{detail}", // URL with parameters 
    new { controller = "Login", action = "LogIn", detail =""} // Parameter defaults 
); 

/home/index/#create तक पहुँचने पर, यह मेरे डिफ़ॉल्ट मार्ग पर पुन: निर्देशित किया गया है।

यह कैसे किया जा सकता है?

+1

कुछ उत्तरों के आधार पर। मुझे # हैश के साथ पता है, ब्राउज़र सर्वर से अनुरोध नहीं भेज रहा है कि केवल तभी जब यूआरएल एक ही पृष्ठ के भीतर दूसरी बार बदल जाता है। तो यह सवाल अभी भी समझ में आता है। सोचें कि क्या उपयोगकर्ता इस यूआरएल को बुकमार्क करता है! #hash टिप्पणी एंकर का संदर्भ ले सकता है या एक चयनित मेनू का प्रतिनिधित्व कर सकता है। मैं अभी भी मार्ग में ऐसा करने का एक सही तरीका देख रहा हूं। – CallMeLaNN

उत्तर

46

आप सर्वर पर # प्रतीक के बाद मूल्य नहीं ला सकते हैं क्योंकि यह मान सर्वर पर कभी नहीं भेजा जाता है। केवल क्लाइंट साइड जावास्क्रिप्ट के पास हैश के साथ इस परिभाषित मार्गों तक पहुंच है, जो ज्यादा समझ में नहीं आता है।

+11

यह समझ में आता है। मेरा '# हैश' चयनित मेनू को याद रखने के लिए उपयोग किया जाता है (मुझे कुकी नहीं चाहिए)। जब उपयोगकर्ता मेनू पर क्लिक करता है, तो '#' बदल जाता है और संबंधित सामग्री को अद्यतन करने के लिए सर्वर से AJAX अनुरोध करता है। इस प्रकार उपयोगकर्ता चयनित मेनू के साथ पृष्ठ को बुकमार्क करने में सक्षम है और पठनीय '# menuname' के साथ ब्राउज़र बैक बटन का उपयोग कर सकता है। अगली बार जब उपयोगकर्ता '#' के साथ ब्राउज़ करता है, तो लोड किए गए पृष्ठ में पहले से ही अनावश्यक AJAX अनुरोध के बिना चयनित मेनू है। मुझे रूट डेटा में हैश मान को बांधना होगा क्योंकि प्रत्येक '#' को एक अलग पृष्ठ माना जा सकता है। – CallMeLaNN

+1

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

5

जब कोई ब्राउज़र किसी URL के लिए अनुरोध करता है, तो यह सर्वर पर हैश के बाद कुछ भी नहीं भेजता है। यह मार्ग आपको को जेनरेट युक्त रूट यूआरएल बनाने में सक्षम बनाता है, लेकिन उपयोगकर्ता सर्वर-साइड कुछ भी करने का कोई तरीका नहीं है जब उपयोगकर्ता ऐसे यूआरएल पर जाता है। वेब जिस तरह से काम करता है ...

94

जैसा कि कहा गया है कि रूटिंग का उपयोग करके ऐसा करने का कोई तरीका नहीं है। एकमात्र संभावित समाधान आपके नियंत्रक के कार्यों में पुनर्निर्देशित करते समय # यूआरएल को अपने यूआरएल में जोड़ना है। उदाहरण के लिए।

return Redirect(Url.Action("Index", "Home") + "#create"); 
+8

आईएमओ यह स्वीकार्य उत्तर होना चाहिए। ओपी ने पूछा, "यह कैसे किया जा सकता है?" और यह एकमात्र उत्तर है जो आपको उचित कार्यवाही देता है, इसके बजाय आप इसे ओपी मूल रूप से क्यों करना चाहते हैं। –

+1

मैंने हैश पैरामीटर, या किसी अन्य क्रिया परिणाम की अनुमति देने के लिए "वापसी दृश्य()" विधि बनाने के तरीके को जानने के लिए बस 20 मिनट बिताए - यह सही है। अच्छा उत्तर! – nocarrier