クライアントのドロップダウンリストに項目を追加すると、これらの項目はサーバー上に永続化されません!
ただし、いくつかの非表示の入力フィールド内に動的に追加された項目(テキストと値のペア)を保存して、サーバー上で解析することもできます。実際の例については、このリンクを参照してください。あなたの例では、selectedIndexを別の非表示フィールドに保存して、サーバー上でアクセスできるようにする必要もあります。
編集
デモ.aspx
<script type="text/javascript">
function saveValue() {
var hiddenField1 = document.getElementById("hiddenField1");
hiddenField1.value = "hello world";
}
</script>
<form id="Form1" method="post" runat="server">
<input type="hidden" id="hiddenField1" name="hiddenField1" value="" />
<asp:Button ID="btnPostBack" runat="server" Text="PostBack"
OnClientClick="saveValue()" onclick="btnPostBack_Click" />
</form>
デモ.aspx.cs
protected void btnPostBack_Click(object sender, EventArgs e)
{
Debug.WriteLine("Value of hiddenField1: " + Request["hiddenField1"]);
Debugger.Break();
}
これは私のために働いた。"hello world"
サーバーに入りました。
編集2
Icarus は、Request オブジェクトを参照することで、サーバーに送信された要素にいつでもアクセスできると指摘しました。もちろん、彼は絶対に正しいです。あなたの質問によると、動的に作成されたすべてのアイテムにアクセスしたいと思っていましたが、それは以下に示す解決策では不可能です。
aspxページ
<script type="text/javascript">
function saveToList() {
var ListBox1 = document.getElementById("ListBox1");
var ListBox2 = document.getElementById("ListBox2");
var Option = document.createElement("option");
Option.text = ListBox1.options[ListBox1.selectedIndex].text;
ListBox2.add(Option);
ListBox2.selectedIndex = 0;
}
</script>
<form id="Form1" method="post" runat="server">
<asp:ListBox ID="ListBox1" runat="server">
<asp:ListItem Text="entry1" Value="1" />
<asp:ListItem Text="entry2" Value="2" />
<asp:ListItem Text="entry3" Value="3" />
<asp:ListItem Text="entry4" Value="4" />
</asp:ListBox>
<asp:ListBox ID="ListBox2" runat="server" Width="100"></asp:ListBox>
<input id="Button1" type="button" value="Save to List" onclick="saveToList()" />
<asp:Button ID="btnPostBack" runat="server" Text="PostBack" OnClick="btnPostBack_Click" />
コードビハインド
protected void btnPostBack_Click(object sender, EventArgs e)
{
Debug.WriteLine("SelectedValue of ListBox2: " + Request["ListBox2"]);
// no access to all other clientSide created items in ListBox2
Debugger.Break();
}