2009-05-21 12 views
7

साथ routeValues ​​खो देता है मैंने देखा है क्या Html.BeginForm() विधि encodes फार्म टैग की कार्रवाई विशेषता में routeValues ​​ की आपूर्ति की। यह POST विधि के साथ अच्छी तरह से काम करता है। लेकिन यदि विधि प्राप्त होती है तो कार्रवाई यूआरएल में सभी पैरामीटर ब्राउज़र द्वारा छीन लिया जाता है (आईई 8 और फ़ायरफ़ॉक्स 3.0.7 पर परीक्षण किया जाता है)।Html.BeginForm FormMethod.GET

उदाहरण के लिए, ध्यान में रखते हुए इस कोड

<% 
    using (Html.BeginForm("TestAction", "TestController", new { test = 123 }, 
     FormMethod.Get)) 
    { 
     Response.Write("<input type='submit'>"); 
    }; 
%> 

जैसे HTML

<form action="/TestController/TestAction?test=123" method="get"> 
    <input type='submit'> 
</form> 

देता है लेकिन प्रपत्र यूआरएल जमा करने के बाद बन गया /TestController/TestAction नहीं /TestController/TestAction? परीक्षण = 123 (पैरामीटर खो गया है)।

अब मैं Html.Hidden()routeValues ​​ पैरामीटर के बजाय कॉल, लेकिन मैं दिलचस्पी के समूह का उपयोग एक और समाधान नहीं है? इसे एमवीसी में एक बग के रूप में माना जाना चाहिए जिसे कभी तय किया जाएगा?

+0

क्या आप अपनी समस्या को स्पष्ट कर सकते हैं? क्या आप पोस्ट के बजाय जीईटी का उपयोग करके फॉर्म जमा करने की कोशिश कर रहे हैं? क्या आप एक उदाहरण दे सकते हैं? –

उत्तर

7

जैसा कि आप देख सकते हैं, जेनरेट किया गया HTML "सही" है, और आपके पास इच्छित अर्थपूर्ण है, इसलिए यह सर्वर-साइड समस्या नहीं है, बल्कि क्लाइंट-साइड एक है। इस मामले में ब्राउज़र कार्रवाई URL से क्वेरी भाग को अलग कर रहा है, जबकि आप इसकी बजाय क्वेरी में संलग्न होने की उम्मीद करते हैं। यदि आप विनिर्देश पढ़ते हैं, तो कार्रवाई में कोई प्रश्न नहीं होना चाहिए (यह एक यूआरआई है, एक यूआरएल नहीं है), इसलिए वास्तव में आपने HTTP विनिर्देश की "सीमा" मारा।

आपको बिना किसी क्वेरी के बेयर यूआरएल पर निर्देशित किया जाता है, क्योंकि HTML में आपके पास सबमिट करने के लिए कुछ भी नहीं है। सबमिट फ़ील्ड में नाम और मूल्य देने का प्रयास करें, या एक छुपा फ़ील्ड जोड़ें, आप देखेंगे कि पैरामीटर क्वेरी में प्रेषित होते हैं।

आपको निश्चित रूप से इस मामले में छिपे हुए फ़ील्ड का उपयोग करना चाहिए।

+0

दिलचस्प क्यों एएसपी.नेट एमवीसी एचटीएमएल हेल्पर BeginForm() GET विधि चुने जाने पर छुपा फ़ील्ड स्वयं प्रस्तुत नहीं करता है? –

+0

वैकल्पिक रूप से, एक विशिष्ट मार्ग परिभाषा बनाएं ताकि 'test' का मान रूट सेगमेंट के रूप में जोड़ा जा सके, बल्कि एक क्वेरी स्ट्रिंग, जिस स्थिति में आपको छिपी हुई इनपुट की आवश्यकता नहीं है –

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