1

更新パネルにいくつかのドロップダウンを含むWebパーツがあります。PostBackUrlがSharePointアプリケーションページに設定されている送信ボタンがあります

<asp:DropDownList ID="ClassSelector" runat="server" Enabled="False" 
    AutoPostBack="True" onselectedindexchanged="ClassSelector_SelectedIndexChanged">
    <asp:ListItem Selected="True" Value="-null-">Select Class...</asp:ListItem>
    <asp:ListItem Value="1">Class 1</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="btnSubmit" runat="server" Text="Show Page" Enabled="False" 
                PostBackUrl="~/_layouts/MyWebParts/MyAppPage.aspx" />

これは、作成したアプリケーションページにブラウザをリダイレクトする際に機能しますが、フォームデータにアクセスできません。

アプリケーションページのPage_Load関数には、次のデバッグコードがあります。

protected void Page_Load(object sender, EventArgs e)
{
    Label1.Text = "";

    foreach (String s in Page.Request.Form.AllKeys)
    {
        Label1.Text += s + ": " + Page.Request.Form[s] + "<br />";
    }

}

これは、必要なデータが実際にページに投稿されていることを示しています。

ctl00$m$g_24a73cf8_8190_4ddb_b38b_bf523b12dbd3$ctl00$SemesterSelector: 28
ctl00$m$g_24a73cf8_8190_4ddb_b38b_bf523b12dbd3$ctl00$ClassSelector: 11-0021-A

しかし、私がこれにアクセスしようとすると、次のようになります。

Page.Request.Form["ClassSelector"]

何も返されません。私はここで単純な何かを見逃しているに違いないことを知っていますが、何がわからないのです。

どんな助けでも大歓迎です。

4

2 に答える 2

1

ああ、ASP.NETマスターページプレフィックスの問題です!私のお気に入りの1つ。

アプリケーションページのマスターページでは、サーバー側のコントロールの前にプレフィックスを付けて、それらが一意になるようにします。コレクションを介してコントロールFormにアクセスすることになった場合は、コントロールIDだけでなく、ContentPlaceholderプレフィックスも使用してコントロールにアクセスする必要があります。そのため、デバッグロジックからこのような大きなIDがダンプされます。

プログラムでコントロールのIDを取得する場合は、を使用できますFindControlが、これには適切なコンテンツプレースホルダースコープをターゲットにする必要があります。ここに良いチュートリアル/説明があります(これはこれがどれほど複雑になる可能性があるかを本当に強調しています!)。

もちろん、使用できる他のオプションは、デバッグコードから見たものに基づいてコントロールIDをハードコーディングすることです...ただし、コンテンツプレースホルダーまたはコントロールを別の場所に変更した場合は信頼できません。容器。

答えは、コントロールがどれだけ静的になるかによって決まると思います。

お役に立てれば。幸運を!!

于 2011-09-05T23:30:43.407 に答える
0

そのようにアクセスするには、使用する必要があります

Page.Request.Form["ctl00$m$g_24a73cf8_8190_4ddb_b38b_bf523b12dbd3$ctl00$ClassSelector"]

ラベルテキストを s plus に設定したコードから実際にわかるようにRequest.Form[s]

于 2011-09-05T22:59:19.667 に答える