2011-09-19 3 views
0

J'ai rencontré un problème et je n'ai pas encore trouvé de soultions. Permettez-moi de simplifier les choses un peu.ASP Multiselect listbox separator

J'ai deux formulaires, le premier contient un ASP ListBox avec le mode multi-sélection activé. Je soumets la forme et dans l'autre forme que je viens d'utiliser à des fins de test cet extrait de code:

protected void Page_Load(object sender, EventArgs e) 
    { 
     foreach (string formKey in Request.Form.AllKeys) 
     { 
      if (formKey != null) 
      { 
       if (formKey.Equals("ctl00$MainContent$ListBox1")) 
        Label1.Text = Request.Form[formKey]; 
      } 
     } 
    } 

Les problèmes est que les valeurs qui viennent de la zone de liste (les valeurs que j'ai choisi sous la forme précédente) sont séparés par "," par ex. "test1, test2, test3". Comment puis-je changer ce séparateur en "$" par exemple? J'ai besoin de le changer parce que les valeurs réelles peuvent contenir "," et je ne les alimente pas manuellement à la liste.

Je ne peux pas utiliser d'autre mode de transfert de ces valeurs entre le formulaire car l'application entière utilise ce modèle. Les valeurs que je reçois sont ensuite envoyées à un flux de travail où elles seront manipulées et dans le flux de travail, j'ai besoin de savoir où chaque élément de listbox commence et se termine donc il doit être un séparateur unique.

Toute aide est appréciée! Merci beaucoup


Merci MatteKarla mais malheureusement cela ne résout pas mon problème. Oui, c'est un bon moyen de transférer les valeurs d'une forme à une autre. Cependant, je dois utiliser la méthode décrite ci-dessus avec les clés de formulaire de requête car la liste est l'un des nombreux "paramètres" générés lors de l'exécution et dont les valeurs sont envoyées à une méthode de workflow qui prend ces valeurs. Et je ne peux pas me permettre de changer cela dans ma demande.

Mon problème est que le séparateur coma (",") est utilisé par défaut avec une liste déroulante multisélect.

Je pensais qu'il existe peut-être une méthode pour changer ce séparateur de la virgule en un autre car la coma peut aussi être incluse dans la valeur elle-même et cela va créer de la confusion.

Comme je l'ai dit, si je sélectionne trois valeurs test1, test2 et test3, le résultat avec ma méthode sera une chaîne ressemblant à "test1,test2,test3". Cependant, un "test1$test2$test3" serait beaucoup mieux.

Mais j'ai peur que changer ce séparateur par défaut ne soit pas possible. Je dois penser à une méthode pour surmonter ce problème comme le remplacement avant de nourrir la liste de toutes les coma prévues à partir des valeurs avec un autre caractère pour ne pas créer de confusion. Mais ce n'est pas une bonne façon de le faire.

+0

Regardez ma dernière modification. FindControl pourrait peut-être fonctionner? – MatteKarla

Répondre

0

Sur votre première page/formulaire (First.aspx.cs) créer une propriété publique avec la zone de liste:

public ListBox PostedListBox { get { return ListBox1; } } 

Régler le postback-url pour le bouton Second.ASPX

la page Deuxième dans le fichier ASPX-après la @Page -Directive ajouter:

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

Puis, en sur Second.aspx.cs vous pouvez extraire les valeurs:

if (PreviousPage != null) 
{ 
    ListBox postedListbox = PreviousPage.PostedListBox; 
    foreach (var index in postedListbox.GetSelectedIndices()) 
    { 
     var itemText = postedListbox.Items[index].Text; 
    } 
} 

Ou vous pouvez simplement essayer de localiser le contrôle en utilisant:

if (PreviousPage != null) 
{ 
    var control = PreviousPage.FindControl("ListBox1") as ListBox; 
} 

Troisième Edi t:

Vous pouvez utiliser GetValues:

Request.Form.GetValues("ctl00$MainContent$ListBox1"); 

retourne un tableau de chaînes contenant chacun des éléments sélectionnés.