¿Cómo agregar argumentos a un botón ASP PostBackUrl?
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?
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í:
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?