سؤال

أقوم الآن بإنشاء صفحة بحث تحتوي على مربع نص وزر، وربما قائمة منسدلة لتصفية النتائج لاحقًا.لقد قمت بتعيين PostBackUrl الخاص بالزر على صفحة البحث الخاصة بي (~/search.aspx).هل هناك طريقة سهلة لتمرير القيمة الموجودة في مربع النص إلى صفحة البحث؟

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

المحلول

إذا كان لديك مجموعة PostBackUrl على الزر الخاص بك، ثم الحقل مربع البحث في الصفحة الأولى، وأية حقول النموذج أخرى على تلك الصفحة، وبالفعل نشرها على صفحة البحث الخاصة بك. الحيلة هي الحصول على الوصول إليها في التعليمات البرمجية الخلفية لصفحة search.aspx الخاص بك.

if (Page.PreviousPage != null)
{
    TextBox SourceTextBox = 
        (TextBox)Page.PreviousPage.FindControl("TextBox1");
    if (SourceTextBox != null)
    {
        Label1.Text = SourceTextBox.Text;
    }
}

وهذا هو اتجاه واحد. هناك بعض الاختصارات للغاية، مثل استخدام التوجيه PreviousPageType في الجزء العلوي من الصفحة search.aspx الخاص بك:

<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> 

ومزيد من التفاصيل حول كيفية استخدام ذلك، وكذلك الطريقة الأولى، ويمكن العثور عليها هنا:

http://msdn.microsoft.com/en-us/library/ ms178139.aspx

نصائح أخرى

وكنت قد تكون قادرة على استخدام useSubmitBehavior = "صحيح" ووضع أسلوب = "الحصول على" في النموذج. بهذه الطريقة فإنه سيتم استخدام المتصفحات تقدم السلوك كما سيتم إلحاق قيم النص في سلسلة الاستعلام

ويمكنك أيضا استخدام بعض جافا سكريبت لتحقيق ذلك عن طريق اصطياد أدخل الحدث بضغطة رئيسيا في مجال النص. هل يمكن توسيع هذا إجراء التحقق من صحة النص في مربع النص كذلك. (هذا المثال يستخدم مسج )

$(document).ready(function(){
    // Event Handlers to allow searching after pressing Enter key
    $("#myTextBoxID").bind("keypress", function(e){
        switch (e.keyCode){
        case (13):
            // Execute code here ...
            break;
        default:
            break;
        }
    });
});

تم حل المشكلة، الصفحة السابقة هي "default.aspx"، ولكن عنصر التحكم غير موجود في تلك الصفحة.وبما أنني أستخدم الصفحات الرئيسية، فلا بد لي من الاختيار يتقن بدلا من الصفحة السابقة.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If PreviousPage IsNot Nothing Then
      Dim txtBoxSrc As New TextBox
      txtBoxSrc = CType(Master.FindControl("searchbox"), TextBox)
      If txtBoxSrc IsNot Nothing Then
          MsgBox(txtBoxSrc.Text)
      End If
  End If
End Sub

<div class="gsSearch">
    <asp:TextBox ID="searchbox" runat="server"></asp:TextBox>
    <asp:Button ID="searchbutton" runat="server" Text="search" 
         UseSubmitBehavior="true" PostBackUrl="~/search.aspx" />
</div>

وليس لدي أي فكرة لماذا ستحصل مرجع فارغة في هذا الرمز، عارية مع بلدي VB غير معرفة، ولكن انا ذاهب الى محاولة إجراء تعديل طفيف قد تكون قادرة على محاكمة.

وأنا أعلم أن FindControl يعود التحكم نوع .. ربما يمكنك الانتظار إلى مربع قبل ان تتحول الى نوع معين.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If PreviousPage IsNot Nothing Then
      Dim txtBoxSrc As New Control
      txtBoxSrc = PreviousPage.FindControl("searchbox")
      If txtBoxSrc IsNot Nothing Then
          MsgBox((CType(txtBoxSrc, TextBox)).Text)
      End If
  End If
End Sub

<div class="gsSearch">
    <asp:TextBox ID="searchbox" runat="server"></asp:TextBox>
    <asp:Button ID="searchbutton" runat="server" Text="search" 
         UseSubmitBehavior="true" PostBackUrl="~/search.aspx" />
</div>

وماذا عن هذا (VB، آسف):

والحصول على القيمة من مربع النص عبر codebehind، وببساطة وضع postbackurl على جهاز التحكم مثل هذا:

dim textval = SourceTextBox.text
dim myparam = "George"

searchbutton.PostBackUrl = "~/search.aspx?myparam=" & myparam

ويمكنك فقط وضع هذا في وظيفة والتي تعالج نقرة زر، أليس كذلك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top