Pergunta

Estou construindo uma página de busca com uma caixa de texto e um botão para agora, e provavelmente uma lista suspensa para filtrar os resultados mais tarde. Tenho set PostBackUrl do meu botão para minha página de pesquisa (~ / Search.aspx). Existe uma maneira fácil de passar o valor na caixa de texto para a página de pesquisa?

Foi útil?

Solução

Se você tem o conjunto PostBackUrl em seu botão, então o campo caixa de pesquisa em sua primeira página, e quaisquer outros campos de formulário nessa página, já estão sendo lançadas em sua página de pesquisa. O truque é obter acesso a eles no código-behind para sua página Search.aspx.

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

Essa é uma maneira. Há alguns atalhos também, como usar a diretiva PreviousPageType no topo de sua página Search.aspx:

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

Mais detalhes sobre como usar isso, assim como o primeiro método, pode ser encontrada aqui:

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

Outras dicas

você pode ser capaz de usar useSubmitBehavior = "true" e colocar um method = "get" no formulário. Dessa forma, ele vai usar os navegadores submeter comportamento e anexar os valores da caixa de texto do que a string de consulta

Você também pode usar um pouco de JavaScript para alcançar este objetivo por capturar o evento keypress chave no campo caixa de texto Enter. Você poderia expandir esse número para executar a validação do texto na caixa de texto também. (Este exemplo está usando 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;
        }
    });
});

Resolvido o problema, a página anterior é "default.aspx", no entanto, o controle não reside nessa página. Desde que eu uso páginas mestras, eu tenho que selecionar Mestre em vez de PreviousPage .

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>

Eu não tenho idéia por que você iria obter uma referência nula nesse código, nu com a minha não-saber VB, mas eu vou tentar fazer uma pequena modificação que você pode ser capaz de tentar.

Eu sei que o FindControl retorna o tipo Control .. talvez você pode esperar para a caixa-lo em um 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>

E, este (vb, sorry):

Obter o valor da caixa de texto via codebehind, e simplesmente definir o PostBackUrl no controle assim:

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

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

Você pode apenas colocar isso na função que manipula o clique de botão, não?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top