1

プロジェクトにdropDownlist があり、javascript で項目を追加しています。今、私はC#で(ボタンクリックイベントで)選択されたインデックスを取得したいと考えています。しかし、ビューステートが維持されていないことが問題のように見えるため、これを行うことができません。さらに私が持っている

EnableEventValidation="false" 

私のページで この機能を実現する方法を教えてください。現在、非表示フィールドに選択した値を追加してから、C# でその非表示フィールドにアクセスしています。それは働いていますが、私は「清潔さ」が欲しいです。

よろしく

4

1 に答える 1

1

ASP.NET がフォーム POST を実行するとき、ドロップダウン オプションをサーバーに渡し、さらに処理するためにサーバーで再作成する必要があります。これは、ViewState によって実現されます。

これを行う他の方法は知りませんが、選択した値にRequest.Form[ddlProducts.UniqueID]基づいて項目インデックスを把握できる場合は、ドロップダウンの選択した値を取得することができます。それ以外の場合は、隠しフィールドが唯一のオプションだと思います

完全な例を次に示します。

<head runat="server">
    <title></title>
    <script type="text/javascript">
        window.onload = function () {
            var select = document.getElementById("ddlProducts");
            select.options[select.options.length] = new Option('Product 1', 'Value 1');
            select.options[select.options.length] = new Option('Product 2', 'Value 2');
            select.options[select.options.length] = new Option('Product 3', 'Value 3');
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="ddlProducts" runat="server">
        </asp:DropDownList>
        <asp:Button ID="btnOK" runat="server" Text="OK" OnClick="Process" />&nbsp;<span id="output"
            runat="server" />
    </div>
    </form>
</body>
</html>

protected void Process(object sender, EventArgs e)
{
    int selectedIndex = ddlProducts.SelectedIndex;
    output.InnerHtml = Request.Form[ddlProducts.UniqueID];
}
于 2013-01-17T06:16:52.740 に答える