2009-05-08 6 views
1

J'ai deux contrôles sur une page, l'un est une entrée de recherche et de contrôle de soumission l'autre est le contrôle des résultats de recherche, ils doivent être séparés en raison de la disposition du site. Je regarde les différentes façons d'avoir le contrôle de recherche soumettre afficher les résultats de recherche dans le contrôle des résultats, d'abord ne pas déranger sur les postbacks, im plus dérangé par deux chosesmeilleur moyen d'afficher les résultats de recherche sur la même page que le contrôle de recherche dans ASP.Net

1) Comment puis-je transmettre les termes de recherche sélectionnés à la même page (ou bien au contrôle qui affiche les résultats) QUerystring, hiddenfield, session, viewstate (champ effectivement caché)?

2) comment puis-je réellement soumettre la page à elle-même.

excuses si cela est un peu basique, mais je ne suis pas un expert ASP.Net

Répondre

2

Il y a beaucoup de façons de faire ce que vous demandez et d'être honnête, je ne suis pas sûr qu'il y ait une bonne réponse . Tout dépend de votre style de développement et du problème que vous essayez de résoudre. Je possède une bonne expérience en matière d'écriture d'interfaces de recherche et, à mon avis, l'utilisation de la chaîne de requête est un bon moyen de transmettre des critères de recherche. Cependant cela a ses avantages et ses inconvénients.

Plus:

  • Vous pouvez accéder à une page de résultats de recherche partout dans votre site ou un site externe en passant simplement une chaîne de requête.

  • Vos résultats de recherche peuvent être explorés facilement car il s'agit simplement de pages sur votre site.

  • Les chaînes de requête sont assez simples à utiliser.

  • L'utilisateur peut voir ce qu'il recherche dans la chaîne de requête. (Cependant, cela pourrait être une mauvaise chose selon son utilisation.)

  • Les utilisateurs peuvent réserver marque Thier résultats serach (Merci Fredrik Mörk)

Moins:

  • Vous pourriez avoir à Prenez le temps de faire en sorte que vos critères de recherche soient beaux. C'EST À DIRE. Voulez-vous que vos utilisateurs voient uniquement un identifiant qui ne signifie rien pour eux?

  • Vous pouvez rencontrer des problèmes de codage html de vos critères de recherche car ils devront être passés en argument de chaîne de requête. L'encodage peut être fait facilement, mais il peut vous causer des maux de tête si vous utilisez des caractères réservés pour d'autres choses.

  • Vos utilisateurs peuvent voir ce qu'ils recherchent. (Comme j'ai dit que cela pourrait être une bonne ou une mauvaise chose.)

  • Votre chaîne de requête peut devenir beaucoup trop longue.

Il y a probablement d'autres choses auxquelles je n'ai pas pensé mais qui vous donnent une idée.Pour republier une page, il existe plusieurs façons de le faire, mais essayez un bouton de soumission ou une balise d'ancrage avec un signe # comme attribut href.

Une autre chose à penser pourrait être d'utiliser un correcteur d'url pour rendre votre chaîne de requête moche une belle URL.

Par exemple:

used_car_search.aspx make = Ford & modèle = focus

pourrait devenir:

used_ford_focus.html

:) Bonne programmation

+0

Je voudrais ajouter une chose du côté Pros; à mon avis le plus important: le résultat de la recherche devient bookmarkable. C'est (à mes yeux) une caractéristique très importante d'une bonne interface de recherche. –

+0

@Fredrik Mork - Bon point. – lexx

+0

merci, je m'étais évité de querystrings mais les avantages surpoids les inconvénients de mon point de vue – Matt

2

Ce sont UserControls, correct? Je pense que la meilleure façon de communiquer entre UserControls est d'utiliser des événements. Créez votre propre classe EventArgs pour encapsuler les critères de recherche. Le contrôle de soumission déclenche un événement lorsqu'une recherche est soumise et la page contenant gère l'événement et appelle une méthode sur le contrôle des résultats de recherche pour effectuer la recherche et afficher les résultats.

Alternativement, le contrôle des résultats pourrait juste être responsable de l'affichage d'une collection d'objets et le contrôle de recherche exécuterait réellement la recherche et retournerait la collection dans EventArgs.

Voici un exemple d'un ensemble principal de UserControls. Le Projectlist UserControl déclenche un événement lorsqu'un projet est sélectionné:

public event EventHandler<ProjectSelectedEventArgs> ProjectSelected; 

    protected void uxProjectList_OnSelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (ProjectSelected != null) 
     { 
      var keys = uxProjectList.DataKeys[uxProjectList.SelectedIndex].Values; 
      var projectId = (Guid)keys[0]; 

      var args = new ProjectSelectedEventArgs(projectId); 
      ProjectSelected(this, args); 
     } 
    } 

La page conteneur gère l'événement et appelle une méthode sur le ProjectDetail UserControl pour afficher les détails du projet.

protected void uxHeroProjectList_ProjectSelected(object sender, ProjectSelectedEventArgs e) 
    { 

     uxProjectDetails.Visible = true; 
     uxProjectDetails.DisplayDetails(e.ProjectId); 
    } 
Questions connexes