2008-09-08 16 views
5

मैं इस तरह एक कार्रवाई का उपयोग करते हुए कि मैं पर हूँ है:ASP.NET MVC पूर्वावलोकन 4 बंद करो Url.RouteUrl() आदि मौजूदा मानकों

:

News.mvc/Archive/2008 

मैं इस तरह इस पृष्ठ पर एक फार्म का

<form> 
    <select name="year"> 
     <option value="2007">2007</option> 
    </select> 
</form> 

फ़ॉर्म सबमिट करना फॉर्म में सबमिट किया जाना चाहिए यदि '2007' फॉर्म में चुना गया है तो .mvc/Archive/2007 पर जाना चाहिए।

इसके लिए फॉर्म 'एक्शन' विशेषता "न्यूज.एमवीसी/आर्काइव" की आवश्यकता है।

हालांकि, अगर मैं इस तरह एक रूप की घोषणा:

<form method="get" action="<%=Url.RouteUrl("News-Archive")%>"> 

उसे रेंडर के रूप में:

<form method="get" action="/News.mvc/Archive/2008"> 

कोई मुझे पता है कि मैं क्या याद कर रहा हूँ तो कृपया कर सकते हैं?

उत्तर

2

आपको कुछ समस्याएं हैं, मुझे लगता है।

सबसे पहले, आपके मार्ग में "वर्ष" के लिए डिफ़ॉल्ट मान नहीं है, इसलिए URL "/News.mvc/Archive" वास्तव में रूटिंग उद्देश्यों के लिए मान्य नहीं है।

दूसरा, आप फॉर्म मानों को मार्ग पैरामीटर के रूप में दिखाने की उम्मीद कर रहे हैं, लेकिन ऐसा नहीं है कि HTML कैसे काम करता है। यदि आप एक चयन और सबमिट के साथ एक सादा रूप का उपयोग करते हैं, तो आपके यूआरएल के अंत में "? वर्ष = 2007" होने का अंत हो जाएगा। एचटीएमएल में काम करने के लिए जीईटी-विधि फॉर्म कैसे डिजाइन किए गए हैं।

तो आपको कुछ महत्वपूर्ण बातों के बारे में कुछ निष्कर्ष निकालना होगा।

  • आप उपयोगकर्ता ड्रॉप-डाउन से कुछ का चयन करने में सक्षम होना चाहते हैं और है कि प्रस्तुत URL परिवर्तन, तो आप (जावास्क्रिप्ट का उपयोग करने के प्रपत्र सबमिट बाधा उत्पन्न कर रहा है और सही तैयार करने से इस लक्ष्य को हासिल करने के लिए जा रहे हैं यूआरएल)।
  • यदि आप अपने यूआरएल के रूप में /News.mvc/Archive?year=2007 के साथ ठीक हैं, तो आपको पूरी तरह से मार्ग से {वर्ष} डिज़ाइनर को हटा देना चाहिए। आप अभी भी अपनी क्रिया पर "int वर्ष" पैरामीटर छोड़ सकते हैं, क्योंकि फॉर्म मान एक्शन विधि पैरामीटर भी पॉप्युलेट करेंगे।
+0

सही रास्ते पर: अर्थात

public ActionResult Archive(int year) { if (!String.IsNullOrEmpty(Request["year"])) { return RedirectToAction("Archive", new { year = Request["year"] }); } if (year == 0) { /* ... */ } /* ... */ } 

3) स्पष्ट रूप से Url.RouteUrl() कॉल में वर्ष के लिए डिफ़ॉल्ट मान निर्दिष्ट। अधिक जानकारी के लिए प्रश्न में टिप्पणी संपादित करें देखें। –

0

मुझे लगता है कि मैं बाहर काम किया है क्यों - मार्ग {साल} शामिल हैं, इसलिए उत्पन्न मार्गों हमेशा भी ..

किसी को भी इस बात की पुष्टि कर सकते हैं करेंगे?

0

समाधान

यहाँ ठीक है (मुझे वहाँ प्रमुख के लिए ब्रैड करने के लिए धन्यवाद) समाधान है।

1) मार्ग में डिफ़ॉल्ट मान आवश्यक है:

routes.MapRoute(
     "News-Archive",            
     "News.mvc/Archive/{year}",       
     new { controller = "News", action = "Archive", year = 0 } 
    ); 

2) पैरामीटर प्राप्त करें जैसे कि वे यूआरएल खंड नहीं है पार्स करने के लिए एक रीडायरेक्ट जोड़ें।

public ActionResult Archive(int year) 
{ 
    if (!String.IsNullOrEmpty(Request["year"])) 
    { 
     return RedirectToAction("Archive", new { year = Request["year"] }); 
    } 
} 

3) सुनिश्चित करें कि आप अनुरोध के लिए आपकी रीडायरेक्ट कोड "डिफ़ॉल्ट" साल प्रविष्टियों रीडायरेक्ट करने के लिए से पहले किसी भी कोड पैरामीटर की है।

Url.RouteUrl("News-Archive", new { year = 0 }) 
संबंधित मुद्दे