2

DropDownListASP.NET(C#を使用)とjQueryの組み合わせを使用して、ボタンを使用してsを作成しようとしています。これらDropDownListにはSQLクエリが入力されます。

私が苦労しているのは、ボタンをクリックするだけで複数を追加することです。

ユーザーがボタンを5回クリックした場合、さらに5つDropDownListのが作成され、同じデータが入力されます。理想的には、それぞれDropDownListがテーブルの新しい行に含まれるか、同様の方法で編成されます。

JavaScriptでSQL接続をしたくありません。これに関するアドバイスはありますか?

編集:

を使用してみましたが<asp:PlaceHolder>、それを使用してを追加しましたDropDownList。ただし、この方法を使用して複数を追加する方法を理解できませんでした。:

<asp:PlaceHolder ID="PlaceHolder1" runat="server"/>

protected void Add_Dropdownlist()
{
   DropDownList DropDownList1 = new DropDownList();
   PlaceHolder1.Controls.Add(DropDownList1);
}

jQueryを使用して元のをコピーしてみましたDropDownListDropDownList私が抱えていた問題は、jQueryからオリジナルを取得する方法がわからなかったということでした<asp:DropDownList>。代わりに変更すると<select>、ASP(サーバー)側からSQLデータを取り込む方法がわかりませんでした。

<select id="DropDownList1">
  <option value="-1"></option>
</select>

<asp:DropDownList ID="DropDownList2" runat="server"></asp:DropDownList>

function copy_Dropdownlist()
{
  newDropdownlist = jQuey.extend({}, DropDownList2);
}

要するに、私はいくつかの道をたどってきましたが、どれも正しいとは思いません。私はASP.NET(google Education)を初めて使用しますが、問題はクライアント側のjQueryとサーバー側のASP.NETのリンクにあると思います。助けてくれてありがとう。

4

2 に答える 2

1

(これはあなたの<asp:PlaceHolder>アプローチを参照しています。<asp:Panel>ここではより適切と思われるので、実際にはを使用します)

あなたが遭遇している問題は、DropDownListsがポストバック間で持続されないことであるように見えます。したがって、新しいものを作成して追加するたびに、PlaceHolder最終的には1つだけになります。

これを解決するには、すでに作成したものを追跡する必要があります。で、 sのPage_Loadストレージコンテナを作成し(これにはを使用します)、ユーザーの" "に保存します。;に注意してください これを作成するのは1回だけです(PostBackするたびではなく、ページが最初に読み込まれるとき)。DropDownListList<>Session!Page.IsPostBack

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        List<DropDownList> DDLList = new List<DropDownList>();
        Session["DDLs"] = DDLList;
    }
}

これで、ボタンをクリックすると、次のことができます。

  • 変数から現在存在するDropDownLists(存在する場合)を取得します。Session
  • このボタンの新しいものを追加し、そのリストをクリックします
  • DropDownListすべてのをに追加しますPanel
  • そして、更新されたリストをSession変数に保存し直します。

このような:

protected void Button1_Click(object sender, EventArgs e)
{
    DropDownList newDropDown = new DropDownList();
    List<DropDownList> existingDropDowns = (List<DropDownList>)Session["DDLs"];
    existingDropDowns.Add(newDropDown);

    foreach (DropDownList dropdown in existingDropDowns)
    {
        Panel1.Controls.Add(dropdown);
    }

    Session["DDLs"] = existingDropDowns;
}

あなたが何を達成しようとしているのか正確にはわかりませんが、これでうまくいけば始められるはずです。

于 2012-06-15T14:54:11.883 に答える
0

@ jadarnel27

助けてくれてありがとう、それは私が行く必要があるところに私を連れて行った。選択の変更に関する投稿を処理するために、もう少し作業を行う必要がありました。これが私が最終的に得たものです。

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
      List<DropDownList> DDLList = new List<DropDownList>();
      Session["DDLs"] = DDLList;
  }
  else
  {
    List<DropDownList> existingDropDowns = (List<DropDownList>)Session["DDLs"];
    //Add all existing DropDownLists to Panel
    foreach (DropDownList dropdown in existingDropDowns)
    {
      Panel1.Controls.Add(dropdown);
      dropdown.AutoPostBack=true;
      Panel1.Controls.Add(new LiteralControl("<br/>"));
    }
    Session["DDLs"] = existingDropDowns;
  }
}

protected void Button_Click(Object sender, EventArgs e) 
{
  List<DropDownList> existingDropDowns = (List<DropDownList>)Session["DDLs"];
  DropDownList newDropDown = new DropDownList();        
  newDropDown.ID = "DDL" + existingDropDowns.Count.ToString();
  //Bind DropDownList to SQL Table
  Populate_List("mySQLTable", newDropDown, "");
  existingDropDowns.Add(newDropDown);
  //Add only new DropDownList to Panel
  Panel1.Controls.Add(newDropDown);
  newDropDown.AutoPostBack=true;
  Panel1.Controls.Add(new LiteralControl("<br/>"));
  Session["DDLs"] = existingDropDowns;
}

protected void clickSubmit(Object sender, EventArgs e)
{
  List<DropDownList> existingDropDowns = (List<DropDownList>)Session["DDLs"];
  foreach (DropDownList dropdown in existingDropDowns)
  {
      //Insert each DropDownList selected value into SQL Table
      ETS.Core.Db.Database.ExecuteNoLog("INSERT INTO myNewTable (id,text) VALUES ('" + dropdown.SelectedValue + "', '" + dropdown.SelectedItem  + "')");
  }
}

再度、感謝します。

于 2012-06-15T20:19:37.240 に答える