2011-09-19 40 views
0

我遇到了一個問題,我還沒有設法找到任何靈魂。讓我簡化一下。ASP多選列表框分隔符

我有2種形式,第一種包含啓用多選模式的ASP列表框。我提交表單,並在其他形式的我使用只是爲了測試目的這個代碼片段:

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]; 
      } 
     } 
    } 

的問題是,是來自列表框(我在以前的形式選擇的值)的值用「,」隔開,例如。 「TEST1,TEST2,TEST3」。例如,如何將此分隔符更改爲「$」?我需要改變它,因爲實際值可能包含「,」,我不會手動將它們饋送到列表框。

因爲整個應用程序都使用此模型,所以我無法使用任何其他模式在窗體之間傳遞此值。我得到的值然後被髮送到工作流程,在那裏將會被操縱,並且在工作流程中我需要知道每個列表框項目開始和結束的位置,因此它必須是唯一的分隔符。

任何幫助是apreciated!非常感謝


謝謝MatteKarla,但不幸的是,這並沒有解決我的問題。是的,這是將值從一種形式轉換爲另一種形式的好方法。

但是,我必須使用上面描述的方法和請求表單鍵,因爲列表框是運行時生成的許多其他「參數」中的一個,並將它們的值發送到採用此值的工作流方法。我不能在我的應用程序中改變這一點。

我的問題是昏迷(「,」)分隔符默認情況下與多選列表框一起使用。

我認爲有可能是一種方法來改變分隔符從昏迷到另一個字符,因爲昏迷也可以包含在價值本身,這會造成混亂。

就像我說的,如果我選擇三個值test1test2test3,與我的方法的結果將是尋找像"test1,test2,test3"的字符串。然而"test1$test2$test3"會好很多。

但我擔心改變這個默認分隔符不是可能的。我必須考慮採用一種方法來克服這個問題,比如在將列表框中的所有目標昏迷提供給其他字符以避免造成混淆之前進行替換。但這不是一個很好的做法。

+0

看看我最後的編輯。 FindControl可能可以工作? – MatteKarla

回答

0

在第一頁/形式(First.aspx.cs)創建一個列表框的公共屬性:

public ListBox PostedListBox { get { return ListBox1; } } 

設置回傳,網址爲按鈕第二。ASPX

@Page -directive添加後的ASPX文件

第二頁:

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

然後在上Second.aspx.cs可以提取值:

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

或者您也可以嘗試通過以下方式找到控件:

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

第三個Edi T:

你可以使用的GetValues:

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

返回包含每個所選擇的項目的字符串數組。