2010-11-25 5 views
0

Ich habe den folgenden Code in meiner Seite, der funktioniert, obwohl die Anzahl der Fälle viel viel größer ist. Ich muss genau die gleiche Liste von Fällen in anderen Auswahlen verwenden, aber ich möchte nicht überall genau das gleiche Code-Duplikat haben.Deklarieren einer Fallliste, die an mehr als einem Ort verwendet werden kann

Ich habe dies:

Select Case Request.Cookies("LatestRefer").Value 
     Case "EZ12" 
      freeCallNumber = "0800 111 1111" 
     Case "EW56" 
      freeCallNumber = "0800 222 2222" 
     Case "AT34" 
      freeCallNumber = "0800 333 3333" 
     Case Else 
       freeCallNumber = "0800 444 4444" 
    End Select 

Ich möchte im Idealfall so etwas wie dieses

Select Case Request.Cookies("cookie1").Value 
      myGlobalListOfCases() 
     End Select 

Select Case Request.Cookies("cookie2").Value 
       myGlobalListOfCases() 
      End Select 

Select Case Request.Cookies("cookie3").Value 
        myGlobalListOfCases() 
       End Select 

Irgendwelche Ideen?

EDIT:

Private Function getFreeCallNumber(ByVal value As String) As String 
     Select Case value 
      Case "EZ12" 
       Return "0800 111 1111" 
      Case Else 
       Return "0800 222 2222" 
     End Select 
    End Function 

Und im page_load:

If Not Request.Cookies("cookie1") is Nothing Then 
    freeCallnumber = Me.getFreeCallNumber(Request.Cookies("cookie1").Value) 
     Else 
    freeCallnumber = Me.getFreeCallNumber(Request.Cookies("cookie2").Value) 
     End If 

Diese Art von Arbeiten, aber es gibt ein kleines Problem. Ich muss die Seite zweimal laden, damit die Telefonnummer geändert werden kann (oder die Telefonnummer erscheint wie beim vorherigen Laden). Hoffe, das macht Sinn ... es ist ziemlich merkwürdiges Verhalten.

+0

Vielleicht erhalten Sie dieses Problem, wenn Sie die Cookies in der gleichen Seitenanforderung festlegen (senden)? Oder vielleicht ist es ein ViewState/Databind-Problem, je nachdem, was Sie mit der Telefonnummer machen. Versuchen Sie, die Seite zu debuggen, oder schreiben Sie einfach in den Antwortstream, um zu sehen, wann das Datum abgerufen wird. I.e. Response.Write ("Nummer =" + freeCallNumber); –

Antwort

2

Erstellen Sie eine Methode:

private string getFreeCallNumber(string value) 
{ 
    switch (value) 
    { 
     case "EZ12": 
      return "0800 111 1111"; 
     case "EW56": 
      return "0800 222 2222"; 
     // TODO: Add more switch cases here. 
     default: 
      return null; 
    } 
} 

beim Aufruf:

string freeCallnumber = this.getFreeCallNumber(Request.Cookies["cookie1"].Value)); 
if (string.IsNullOrEmpty(freeCallNumber)) 
{ 
    // other logic 
} 

Meine Vermutung, dass es wie Dies in VB.net:

Private Function getFreeCallNumber(value as String) as String 
    Select Case value 
     Case "EZ12" 
      return "0800 111 1111" 
     Case "EW56" 
      return "0800 222 2222" 
     ' TODO: Add more switch cases here. 
     Case Else 
      return Nothing 
    End Select 
End Function 
+0

Irgendeine Idee, wie man das in VB funktioniert? Ich hatte einen guten Versuch, aber gescheitert! – Tom

+0

Sehen Sie, ob es korrekt ist, der Code, den ich hinzugefügt habe. Ich habe noch nicht mit VB.net gearbeitet. –

+0

Sie haben den gleichen Code wie ich, und mit ein bisschen Fiedeln habe ich irgendwie funktioniert, aber es gibt ein seltsames Verhalten ... sehen Sie die Bearbeitungen des ursprünglichen Posts. – Tom