2008-11-26 5 views
12

मैं एक ऐप्स मैं वर्तमान में विकसित कर रहा हूँ में एक खोज फ़ॉर्म दिया गया है और मैं इसे method="GET" के बराबर होने के लिए करना चाहते हैं।मैं एक खोज फ़ॉर्म के लिए ASP.Net में <form method = "get"> कैसे कर सकता हूं?

इस प्रकार, जब खोज बटन पर क्लिक, उपयोगकर्ता search.aspx?q=the+query+he+entered

कारण मैं चाहता हूँ यह बस बुकमार्क यूआरएल है, के साथ साथ यह यह इस तरह से करने के लिए क्लीनर का मानना ​​है को जाता है।

मैं भी नहीं चाहता कि व्यूस्टेट छुपा फ़ील्ड मान यूआरएल में जोड़ा गया हो।

सबसे अच्छा मैं के लिए यह है के साथ आ सकता है

:

  1. कब्जा बटन और Response.Redirect के सर्वर साइड क्लिक करें घटना।
  2. को आग लगाने वाले बटन पर जावास्क्रिप्ट onclick हैंडलर संलग्न करें।

दोनों quirky और उप-इष्टतम महसूस करते हैं ... क्या आप बेहतर दृष्टिकोण के बारे में सोच सकते हैं?

उत्तर

10

एक सादे पुराने HTML फॉर्म का उपयोग करें, न कि सर्वर साइड फॉर्म (runat = server), और आपको वास्तव में इसे काम करने में सक्षम होना चाहिए।

यह समस्या हो सकती है यदि आपके पास बॉक्स दृश्य स्टूडियो मास्टर पेज से बाहर है जो पूरे पृष्ठ को सर्वर साइड फॉर्म में लपेटता है, क्योंकि आप फॉर्मों को घोंसला नहीं दे सकते हैं।

वेब प्रपत्रों चूसना करने के लिए नहीं है, लेकिन डिफ़ॉल्ट कार्यान्वयन अक्सर करते हैं। आपको सब कुछ के लिए वेब फॉर्म का उपयोग करने की ज़रूरत नहीं है। कभी-कभी सादे पुरानी पोस्ट/प्राप्त करें और प्रक्रिया अनुरोध कोड ठीक काम करेगा।

+0

हाँ, लेकिन जैसा कि आप राज्य, मेरे masterpage के साथ चारों ओर सब कुछ लपेटो है मुख्य सर्वर फार्म (के बाद से हर एक अन्य पेज एक नियमित रूप से .net वेबफ़ॉर्म है) जवाब के लिए धन्यवाद, हालांकि! –

+0

मैं प्रपत्र के बाहर एक और प्लेसहोल्डर जोड़कर है कि कुछ ही समय के आसपास काम किया है, लेकिन मुख्य सामग्री div के अंदर। इस पर निर्भर करता है कि आपका ऐप कैसे रखा गया है, लेकिन कभी-कभी संभव है, यदि आपकी नौसेना फॉर्म के अंदर होने पर निर्भर करती है, तो प्रोबबी संभव नहीं है। – seanb

+0

FYI करें - "आवरण" फ़ॉर्म केवल यदि आप अपने खुद के रूप तत्वों का निर्माण नहीं करतीं बनाई गई है। मैं मैं कहता हूँ के रूप में अच्छी तरह से हालांकि "एक HTML फार्म का उपयोग करें" हैं सब जगह :) –

0

मैं करूंगा (बी) चूंकि (ए) को एक प्रश्न के लिए दो राउंड ट्रिप की आवश्यकता होगी। वैकल्पिक रूप से, आप पृष्ठ पर व्यूस्टेट को अक्षम कर सकते हैं, जावास्क्रिप्ट के माध्यम से किसी भी अन्य छिपे हुए फ़ील्ड को हटा सकते हैं, और पोस्ट से प्राप्त विधि विधि को संशोधित करने के लिए जावास्क्रिप्ट का भी उपयोग कर सकते हैं। मैंने इसे वास्तविक के लिए कभी नहीं किया है, लेकिन शामिल नमूना का उपयोग कर मेरा खिलौना पृष्ठ एक आकर्षण की तरह काम करता है। खोज स्ट्रिंग एन्कोडिंग और जावास्क्रिप्ट के माध्यम से प्राप्त करने से यह तर्कसंगत रूप से आसान है।

दरअसल, ऐसा लगता है कि आप एएसपी.नेट एमवीसी के साथ खुश होंगे क्योंकि यह दृश्य में प्राप्त करने के लिए फॉर्म विधि को बस आसानी से करने योग्य है।

नमूना कोड jQuery का उपयोग कर

$(document).ready(function() { 
    $('input[type=hidden]').remove(); 
    $('form').attr('method','get'); 
}); 

संपादित करें: ऐसा लगता है कि आप एक ही बात सर्वर साइड भी ऐसा करने में सक्षम होना चाहिए लगता है। शायद OnPreRenderComplete में। अभी देखने के लिए विजुअल स्टूडियो तक पहुंच नहीं है।

0

मैं हमेशा Response.Redirect इस्तेमाल किया के रूप में यह "काम करता है" है।

मुझे नहीं लगता कि एक इष्टतम विधि है।

6

मैंने ऐसी वेबसाइट पर काम किया जिसे क्लाइंट की वेबसाइट पर खोज करने के लिए किसी तृतीय पक्ष साइट पर पोस्ट करना पड़ा। मैं एक साधारण Response.Redirect कर समाप्त हो गया और इतने की तरह क्वेरी स्ट्रिंग के माध्यम से खोज मापदंडों में पारित:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string SearchQueryStringParameters = @"?SearchParameters="; 
    string SearchURL = "Search.aspx" + SearchQueryStringParameters; 

    Response.Redirect(SearchURL); 
} 

और अपने pageload में अपने Search.aspx पृष्ठ पर ...

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!string.IsNullOrEmpty(Request.QueryString["SearchParameters"])) 
    { 
     // prefill your search textbox 
     this.txtSearch.Text = Request.QueryString["SearchParameters"]; 

     // run your code that does a search and fill your repeater/datagrid/whatever here 
    } 
    else 
    { 
     // do nothing but show the search page 
    } 
} 

उम्मीद है कि इससे मदद मिलती है।

4

इस समारोह परमिट GET विधि के उपयोग एक पृष्ठ प्रस्तुत करने के लिए।

विधि आप की जरूरत का उपयोग कर एक पेज देने के लिये:

  1. इस कोड Form.Method = "प्राप्त" जोड़ने; Page_Load विधि में
  2. उपयोग इस कोड < एएसपी: बटन runat = "सर्वर" आईडी = "btnGenerate" /> एक सबमिट बटन
  3. जोड़ने rel = "करते-नहीं-submit" लिए विशेषता के रूप में सभी प्रपत्र तत्वों है कि आप अपने क्वेरी स्ट्रिंग
  4. परिवर्तन आपके पेज का उपयोग कर Request.QueryString
  5. EnableViewState साथ पेज viewstate को निष्क्रिय की codebehind तर्क में शामिल करने के लिए = "false" (जब तक यह प्रयोग किया जाता है नहीं करना चाहती अन्य उद्देश्यों के लिए)

कोड

$(document).ready(function(){ enableSubmitFormByGet(); }); 

function enableSubmitFormByGet(){ 
    if($("form").attr("method") == "get"){ 
     $("form").submit(function() { 
      $("[name^=" + "ctl00" + "]").each(function(i){ 
      var myName = $(this).attr("name"); 
      var newName = "p" + (i-1); 
      $(this).attr("name", newName); 
     }); 
    var qs =$(this).find("input[rel!='do-not-submit'],textarea[rel!='do-not-submit'],select[rel!='do-not-submit'],hidden[rel!='do-not-submit']").not("#__VIEWSTATE,#__EVENTVALIDATION,#__EVENTTARGET,#__EVENTARGUMENT").serialize(); 
    window.document.location.href = "?" + qs; 
    return false; 
}); 
0

बस प्रपत्र प्रस्तुत करने से पहले अपने .click घटना में इस का उपयोग करें:

$("#__VIEWSTATE").remove(); 
    $("#__EVENTVALIDATION").remove(); 
+0

क्या आप समझा सकते हैं कि उपर्युक्त कोड क्या करता है? – Phani

+0

यह परिणामी से viewstate और eventvalidation तार प्रपत्र GET विधि द्वारा उत्पन्न क्वेरी स्ट्रिंग निकाल देता है। आप इसे अपने फॉर्म सबमिशन इवेंट में चिपकाते हैं या सबमिट बटन पर क्लिक करते हैं। – DBithead

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