2009-11-14 14 views
2

J'ai un formulaire de recherche sur chaque page, donc je l'ai mis sur la page maître. après avoir ajouté runat=server à cette forme, je suis maintenant incapable d'utiliser d'autres formes que le serveur runat;)asp.net formulaire serveur runat

comment les gens se débrouillent-ils habituellement? Une idée est d'entourer la page entière avec un formulaire runat=server mais je dois avoir le code dans la page maître même pour les formulaires qui sont utilisés sur une seule sous-page (comme un contact par exemple).

Comment les gens se débrouillent-ils habituellement?

thnx

Répondre

7

Cela a souvent été considéré comme l'une des décisions de conception les plus problématiques sur ASP.NET. C'est une chose triste que vous soyez un peu attaché à ce principe d'une forme par page. L'une des raisons pour lesquelles vous souhaiterez peut-être avoir plusieurs formulaires est que le bouton par défaut sera défini par le navigateur sur le bouton d'envoi. Quelqu'un tapant dans votre boîte de recherche et appuyant sur entrer ne devrait pas soumettre le formulaire principal (supposons que c'est la page de connexion), mais la forme minuscule du bouton de recherche.

La manière la plus simple et «standard» de contourner ce problème est d'utiliser un asp: Panel et de définir la propriété DefaultButton. Cela devrait entourer la partie qui comprend à la fois les champs de recherche et le bouton de recherche.

Ne vous inquiétez pas de coder le <form> depuis l'intérieur de la page maître, en entourant la page entière. C'est un design commun. La plupart des contrôles serveur nécessitent un formulaire, alors pourquoi ne pas simplement l'inclure indépendamment: il est censé être là.

+0

je vois. Je pensais juste qu'il est faux de coder le formulaire qui sera sur une page dans la page maître. d'une manière ou d'une autre ne s'assied pas bien avec moi: P mais comme vous l'avez dit c'est la conception commune, peut-être que je devrais. thnx. – b0x0rz

+1

Au début de ASP.NET, il a souvent été désapprouvé pourquoi MS a choisi cette conception d'avoir un et un seul formulaire par page. Il présente des avantages (la simplicité favorise la complexité) et des inconvénients (certaines approches traditionnelles doivent être repensées). Il y a aussi des solutions de contournement, mais globalement mon conseil serait: s'en tenir à ce design et utiliser ses fonctionnalités et ne commencer à construire des modèles de conception "non-défaut" quand vous devez vraiment et parfaitement comprendre ses conséquences. – Abel

1

première question est, pourquoi voulez-vous avoir plusieurs formes runat = "serveur"?

Vous pouvez toujours avoir des formulaires sans runat="server" sur la page ou utiliser la propriété PostBackUrl sur les contrôles Button pour les publier sur des pages ASP.NET différentes.

Pour collecter des données dans un processus en plusieurs étapes, vous pouvez consulter le contrôle Assistant ASP.NET, voir blog post here de Scott Guthrie. Vous pouvez également tout gérer vous-même et utiliser des panneaux ASP.NET ou utiliser le PostBackUrl déjà mentionné pour naviguer de la page ASP.NET vers une page différente.

+0

bien (pas vraiment sûr exactement ce que vous faites référence - pourquoi ne voulez-vous quoi?) - je dois faire un peu complexe analyser pour la recherche, puis aller à la page suivante. aussi pour le contact (par exemple) je veux faire des trucs comme db insert peut-être et ensuite passer à la page suivante. – b0x0rz

+0

ah, ok (après l'édition). Eh bien, je ne veux pas :) juste ne sais pas comment séparer le code pour deux formes. l'un devrait être sur la page maître puisqu'il est toujours utilisé, l'autre sur la seule page (puisqu'il n'est utilisé que là).Abel (sur cette page) a mentionné que c'est correct d'avoir tout le code sur la page maître même si le second formulaire ne sera utilisé que sur une sous-page. – b0x0rz

+1

Avec * "tout le code" * Je voulais dire les balises '

'. Il est de coutume de les avoir dans le Master, tout simplement parce que vous devrez les avoir de toute façon (à condition d'exceptions). Personnellement, j'utilise souvent un Master à deux niveaux: un Root Master sans forme propre et plusieurs sous-Masters qui héritent du Root Master (les maîtres peuvent être imbriqués). De cette façon, je peux décider par page ce dont j'ai besoin, sans perdre de flexibilité. Cela dépend de votre situation, ce qui est finalement le plus approprié. – Abel

2

Je vous suggère d'avoir un formulaire de recherche html w/o runat = serveur sur la page principale, comme

<form action="Search.aspx" method="get"> 
    <input type="text" name="q" /><input type="submit" /> 
</form> 

Utilisez la méthode = get avoir la possibilité de prendre l'URL de la recherche. Et puis faire tout ce que vous avez besoin avec la requête dans codebehind du Search.aspx:

public void Page_Load(object sender) 
{ 
    string q = Context.Request.QueryString["q"]; 
    /*...*/ 
}