كيف يمكن أن أفعل <form method="“get”"> في ASP.Net بحث شكل ؟

StackOverflow https://stackoverflow.com/questions/319413

  •  11-07-2019
  •  | 
  •  

سؤال

لدي نموذج البحث في التطبيق أنا حاليا النامية ، وأود أن يكون ما يعادل method="GET".

وهكذا, عند النقر على زر البحث ، يذهب المستخدم إلى search.aspx?q=the+query+he+entered

السبب في أنني أريد هذا هو ببساطة bookmarkable عناوين, بالإضافة إلى أنه يشعر أنظف أن تفعل ذلك بهذه الطريقة.

أنا أيضا لا أريد viewstate خفية قيمة الحقل إلحاق URL سواء.

أفضل ما يمكن أن يأتي مع ذلك هو:

  1. القبض على جانب الملقم الحدث انقر فوق الزر ، Response.Redirect.
  2. إرفاق جافا سكريبت onclick معالج الزر الذي يطلق window.location.replace.

كل من يشعر ملتوي دون المستوى الأمثل...هل يمكنك التفكير في أفضل النهج ؟

هل كانت مفيدة؟

المحلول

استخدام سهل القديمة شكل html ، وليس من جانب الخادم شكل (runat=server), و يجب أن يكون في الواقع قادرا على العمل على انجاحه.

هذا يمكن أن يكون مشكلة إذا كان لديك مربع من visual studio الصفحة الرئيسية الذي يلف كامل الصفحة في جانب الخادم شكل لأنك لا تستطيع أن عش الأشكال.

"نماذج ويب" لا يجب أن مص, ولكن الافتراضية تطبيقات في كثير من الأحيان القيام به.لم يكن لديك إلى استخدام "نماذج ويب" في كل شيء.في بعض الأحيان عادي آخر العمر/الحصول على عملية طلب كود سوف تفعل ما يرام.

نصائح أخرى

عملت على موقع على شبكة الإنترنت بعد أن 3rd الطرف الموقع أن تفعل البحث على العميل الموقع.لقد انتهى به بسيط الاستجابة.توجيه ومرت في البحث المعلمات من خلال سلسلة الاستعلام كما يلي:

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

    Response.Redirect(SearchURL);
}

و في البحث الخاص بك.صفحة aspx في pageload...

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
    }
}

ويساعد هذا الأمل.

هذه الوظيفة تسمح بتقديم صفحة باستخدام طريقة الحصول عليها.

تقديم صفحة باستخدام الأسلوب get تحتاج إلى:

  1. إضافة هذه التعليمة البرمجية شكل.Method="get"; في طريقة Page_Load
  2. استخدام هذا الرمز < asp:Button runat="server" ID="btnGenerate" /> كما يقدم زر
  3. إضافة rel="لا تقدم" تنسب إلى كل شكل من العناصر التي لا ترغب في تضمينها في سلسلة الاستعلام
  4. تغيير codebehind المنطق من الصفحة الخاصة بك باستخدام طلب.QueryString
  5. تعطيل الصفحة viewstate مع EnableViewState="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;
});

وأود أن تفعل (ب): (أ) يتطلب مستديرة رحلات استعلام واحد.بدلا من ذلك, يمكنك تعطيل viewstate على الصفحة ، وإزالة أي الحقول المخفية عن طريق جافا سكريبت, و أيضا استخدام جافا سكريبت لتعديل شكل طريقة ما للحصول على.أنا لم أفعل هذا من أجل حقيقية ، ولكن لعبتي الصفحة باستخدام عينة شملت تعمل مثل السحر.فإنه يمكن القول إن أسهل من ترميز سلسلة البحث و القيام على طريق جافا سكريبت.

في الواقع, يبدو أنك ستكون أكثر سعادة مع ASP.NET MVC لأن هذا هو قابلة للتنفيذ بسهولة هناك ببساطة عن طريق وضع شكل طريقة للحصول على عرض.

نموذج التعليمات البرمجية باستخدام مسج

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

تحرير: يبدو أنك يجب أن تكون قادرة على أن تفعل الشيء نفسه من جانب الخادم أيضا.ربما في OnPreRenderComplete.لم يكن لديك الوصول إلى Visual Studio الآن للتحقق.

لقد استخدمت دائما الاستجابة.إعادة توجيه كما أنه "يعمل".

لا أعتقد أن هناك ما هو الأسلوب الأمثل.

مجرد استخدام هذا في الخاص بك .انقر فوق الحدث قبل تقديم النموذج:

    $("#__VIEWSTATE").remove();
    $("#__EVENTVALIDATION").remove();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top