2010-05-03 19 views
5

मैं सेटअप एक खोज मार्ग:ASP.NET MVC खोज मार्ग

routes.MapRoute(
"Search", 
"Search/{q}", 
new { controller = "Search", action = "Index" } 
); 

खोज प्रपत्र एक इनपुट बॉक्स और एक बटन है। मैं नीचे के रूप में एक जीईटी के साथ खोज चाहता हूँ।

<% using(Html.BeginForm("Index", "Search", FormMethod.Get)) 
{%> 
    <%:Html.TextBox("q")%> 
     <span class="query-button"> 
     <input type="submit" value="select" /></span> 
    <% } %> 
</div> 

SearchController पर कार्रवाई है:

public ActionResult Index(string q) 
{ 
    // search logic here 

    return View(new SearchResult(q)); 
} 

URL ऐसा हो जाता है: http://localhost:19502/search?q=mvc+is+great

लेकिन मैं जैसे खोज होना चाहते हैं: http://localhost:19502/search/mvc+is+great

कैसे कर मैंने मार्ग या एचटीएमएल सेट किया है। बेजिनफॉर्म

+0

http://www.w3.org/TR/html401/interact/forms.html#h-17.13.1 देख –

उत्तर

5

सिर्फ एक फॉर्म के साथ ऐसा करने का एक सीधा तरीका नहीं है। एक फॉर्म का इरादा कार्य नाम/मूल्य जोड़ों को प्रेषित करना है - एमवीसी का उपयोग करके इसे बदल नहीं आता है।

तो अपने विकल्प हैं:

  • अवहेलना प्रपत्र फार्म की घटना प्रस्तुत हैंडलिंग, इच्छित URL पर पुन: निर्देशित और वास्तव में
  • प्रस्तुत करने से प्रपत्र को रोकने के लिए झूठी वापस लौट कर जावास्क्रिप्ट का उपयोग करने की कार्यक्षमता एक फॉर्म का उपयोग न करें और रीडायरेक्ट करने के लिए बटन के क्लिक ईवेंट को संभाल लें।

आपका मार्ग पहले से ही इसे संभालने के लिए सेट अप किया गया है।

+0

डैनियल डाल दिया कर सकते हैं यह काफी अच्छी तरह से - आप अनुरोध प्राप्त करने और आपके लिए यूआरएल बदलने के लिए फॉर्म को मजबूर नहीं कर सकते हैं। – mare

+0

रीडायरेक्ट करने के लिए जेएस क्लिक इवेंट को कार्यान्वित किया गया। मैंने http://www.digitalbart.com/jquery-and-urlencode/ का उपयोग किया जो बहुत अच्छा है। – harropriiz

0

या आप FormMethod.Post और अपने नियंत्रक वापसी RedirectToActionResult में

+0

यह यूआरएल स्वरूपण के लिए सर्वर और क्लाइंट के बीच एक अतिरिक्त दौर यात्रा की आवश्यकता है। सिफारिश नहीं की गई। –

+0

हां यह है, अतिरिक्त कॉल लेकिन जेएस का उपयोग करना भी अच्छा तरीका नहीं है। और यह भी अनुशंसा की जाती है कि उपयोगकर्ता को उसी पृष्ठ पर न छोड़ें जहां डेटा में कुछ बदलाव किए गए थे (हटाएं, संपादित करें, जोड़ें) ताकि f5 दबाकर आपको एक और बार डेटा भेजने के लिए कहा जाएगा। और एक नज़र डालें - http://stackoverflow.com/questions/1936/how-to-redirecttoaction-in-asp-net-mvc-without-losing-request-data - लोग इसका उपयोग कर रहे हैं। –