Pregunta

Estoy construyendo una página de búsqueda con un cuadro de texto y un botón por ahora, y probablemente un menú desplegable para filtrar los resultados más adelante. Tengo el botón PostBackUrl configurado en mi página de búsqueda (~ / search.aspx). ¿Hay una manera fácil de pasar el valor en el cuadro de texto a la página de búsqueda?

¿Fue útil?

Solución

Si tiene el PostBackUrl configurado en su botón, entonces el campo del cuadro de búsqueda en su primera página, y cualquier otro campo de formulario en esa página, ya se están publicando en su página de búsqueda. El truco es obtener acceso a ellos en el código subyacente de su página search.aspx.

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

Esa es una manera. También hay algunos accesos directos, como el uso de la directiva PreviousPageType en la parte superior de su página search.aspx:

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

Más detalles sobre cómo usar eso, así como el primer método, se pueden encontrar aquí:

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

Otros consejos

puedes usar useSubmitBehavior = " true " y poner un método = " obtener " en forma. de esa manera, utilizará el comportamiento de envío de los navegadores y agregará los valores de los cuadros de texto a la cadena de consulta

También puedes usar un poco de JavaScript para lograr esto capturando el evento Enter keypress press en el campo del cuadro de texto. Puede expandir esto para realizar la validación del texto en el cuadro de texto también. (Este ejemplo utiliza jQuery )

$(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;
        }
    });
});

Resuelto el problema, la página anterior es " default.aspx " ;, sin embargo, el control no reside en esa página. Dado que uso las páginas maestras, tengo que seleccionar Maestro en lugar de Página anterior .

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>

No tengo idea de por qué obtendrías una referencia nula en ese código, debido a mi falta de conocimiento de VB, pero intentaré hacer una pequeña modificación que podrías intentar.

Sé que FindControl devuelve el tipo de Control ... tal vez pueda esperar para encasillarlo en un tipo específico.

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>

¿Qué pasa con esto? (vb, lo siento):

Obtenga el valor del cuadro de texto a través de codebehind, y simplemente configure el postbackurl en el control de esta manera:

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

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

Puedes poner eso en la función que maneja el clic del botón, ¿no?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top