0

だから私は2ページあります。どちらも同じマスターページを持ち、同じWebアプリケーションの一部です。あるページを別のページに送信しようとしています。送信ページには、次のようないくつかの要素があります。

<ajaxToolkit:ComboBox ID="cmboOptions" AutoCompleteMode="SuggestAppend"
CaseSensitive="false" ItemInsertLocation="Append" runat="server" DropDownStyle="DropDownList">
    <asp:ListItem></asp:ListItem>
    <asp:ListItem Text="Option 1" Value="opt1"></asp:ListItem>
    <asp:ListItem Text="Option 2" Value="opt2"></asp:ListItem>
</ajaxToolkit:ComboBox>

使ってます

<asp:Button ID="btnSubmit" runat="server" Text="Submit" 
PostBackUrl="~/Results.aspx" />

ページを送信します。

ページロードの背後にあるコードの結果ページで私は持っています

NameValueCollection nvc = Request.Form;
string selectedOption = nvc["cmboOptions"];

デバッグ時にNVCを見ると、次のことがわかります。

ctl00$MainContent$cmboOptions$TextBox

値が「オプション1」であるにもかかわらず、文字列にnullの値が含まれています。難読化されたIDをハードコーディングして値を取得しようとすることすらしたくありません。また、ASP.net要素にnameプロパティを設定することもできません。

誰かが私がしていることを達成するためのより良い/適切な方法を知っていますか?ajaxControlToolkitコンボボックスはユーザーにとって便利なので、使い続けたいと思いますが、友人の話を聞くのではなくjQueryを使い続けたいと思っていますが、切り替えるには遅すぎます。

運が悪かったのでここを見ました

C#/ASP.NETでPOSTデータを取得する

そしてここ

ASP.Netフォームに送信された投稿データを読む

そしてここ

http://msdn.microsoft.com/en-us/library/6c3yckfw.aspx

そしてPreviousPage.FindControlを試しましたが、常にnullになります。

御時間ありがとうございます!

編集:

AjaxControlToolKitは避けてください。怠惰になり、甘いUI要素をドラッグ->ドロップしたい場合は便利ですが、単純なものを機能させるのは頭痛の種です。jQueryを使用します。

4

1 に答える 1

1

Page.PreviousPageプロパティを使用する必要があると思いますドロップダウン値は次のように取得できます

if (Page.PreviousPage != null)
{
   DropDownList ddl= (DropDownList)Page.PreviousPage.FindControl("cmboOptions$cmboOptions_TextBox");
   // You have an AjaxToolkit Combo Box, so you must cast it as
   AjaxToolKit.ComboBox ddl= (AjaxToolKit.ComboBox )Page.PreviousPage.FindControl("cmboOptions"); 
   if (ddl != null)
   {
      // do your work
   }
}

Asp.netでのクロスページ投稿についてのmsdnの詳細を読む

更新された回答: Steveコードを確認するために、ドロップダウンリストとポストバックを実行するボタンを備えたページを作成しました(現在、ajaxtoolkitがないため、ドロップダウンリストを使用しています)

<asp:DropDownList ID="ddl" runat="server"  >
    <asp:ListItem></asp:ListItem>
      <asp:ListItem Text="Option 1" Value="opt1"  > </asp:ListItem>
      <asp:ListItem Text="Option 2" Value="opt2"  ></asp:ListItem>
</asp:DropDownList>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" 
    PostBackUrl="~/Default4.aspx" />
 // This code was written on Default5.aspx

 // Default4.aspx code behind
protected void Page_Load(object sender, EventArgs e)
{
    NameValueCollection nvc = Request.Form;
    string val = Request.Form["ddl"];
    string val2 = nvc["ddl"];
    // Both above statement returns the required result
}

ですから、問題はAjaxコンボボックスにあると思います(間違いをしていなければ)

更新された回答: 問題は、ページを投稿するときにAjaxコンボボックスコントロールのIDが変更されることです。次のページでは、ajaxcomboxボックスのIDを次のように取得できます。

マスターページのないページ の場合:マスターページのないaspxページを使用している場合は、ajaxコンボボックスのIDを次のように取得できます。

     //Ajax Combo Box ID format
     ComboBoxID + "$TextBox" 
     // so If I have a combo box with ID ComboBox1 it becomes
     ComboBox1$TextBox
     so we will get the value as
     string comboBoxvalue = Request.Form["ComboBox1$TextBox"];
                   or
     NameValueCollection nvc = Request.Form;
     string cmbvalue = nvc["ComboBox1$TextBox"];

MasterPagesを使用するページの場合:

    //Ajax Combo Box ID format
    "ctl00$" + ContentPlaceHolderID +"$" + ComboBoxID + "$TextBox"
    //I have a combox Box with ID ComboBox1 and ContentPlaceHolderID ContentPlaceHolder1
    so AjaxComboBox ID becomes ctl00$ContentPlaceHolder1$ComboBox1$TextBox

    string cmbvalue = nvc["ctl00$ContentPlaceHolder1$ComboBox1$TextBox"];

    // In your case
   // ComboxBox ID is cmboOptions  and ContentPlaceHolderID is MainContent
    // so your ID becomes
    ctl00$MainContent$cmboOptions$TextBox
    // so you will get the data as
     string cmbvalue = nvc[" ctl00$MainContent$cmboOptions$TextBox"];
于 2012-08-17T19:38:20.907 に答える