-1

私はこれのいくつかの異なる例を読みました、そしてそれはasp.netページのライフサイクルを完全に理解していない人にとっては明らかな初心者の質問のようです、申し訳ありませんがまだ学んでいます。私の修正の試みはどれもうまくいきませんでした。

aspx:

...
<%
for( int j = 0; j < 11; j++)
{
  ChildWeightPounds.Items.Add( new ListItem(j.ToString(),j.ToString()));
}
%>
<asp:DropDownList ID="ChildWeightPounds" runat="server" OnSelectedIndexChanged="DropDownListSelected">
     <asp:ListItem Value="">-Select-</asp:ListItem>
</asp:DropDownList>
...
<asp:Button ID="InsertButton" runat="server" Text="Submit" OnClick="InsertButton_Click" />

aspx.cs:

protected void InsertButton_Click(object sender, EventArgs e)
{
   foreach (Control c in NewPatientForm.Controls)
    {
        ....
        if (c is TextBox)
        {
             TextBox tb = (TextBox)c;
             //Expected response:
             Response.Write( "field: " + tb.ID + " = " + tb.Text + "<br />");
        }
        if (c is DropDownList)
        {
            DropDownList ddl = (DropDownList)c;

            //Unexpected response: 
            //this is not giving me my selected value, but only the top item ("--select--")
            Response.Write("field: " + ddl.ID + ", selectedItem: " + ddl.SelectedItem.Value + "<br />");
         }
    }
 }

これがIsPostBack、DataBind()であり、ページのライフサイクルを理解していないという問題であることは明らかです。しかし、意味がないのは、すべてのコントロールを繰り返し処理していることです。テキストボックス、チェックボックス、チェックボックスリストはすべて正常に機能し、フィールドに値を表示します。何らかの理由で、ドロップダウンリストから値が表示されません。

OnSelectedIndexChangedイベントを使用してみましたが、DataBind()関数を使用してみましたが、これらを試してみても、まだ値を取得できていません。

4

2 に答える 2

2

この例の最大の問題は、ページ内で。を使用してインラインC#を使用していることです<% %>。これはお勧めしませんasp.net。これは、多くの理由で.NETではうまく機能しないレガシー/クラシックASPアプローチです。

dropdownlistアイテムをマークアップファイルから.csファイルに追加するコードを移動してみてください。また、。またはそれ以前に発生するページイベントにフックするようにしてくださいOnPreRender。これが、ページコントロールを変更し、ビューステート/ライフサイクルを正しく機能させることができる最後のポイントです。

protected void Page_Load(object sender, EventArgs e)
{
    for( int j = 0; j < 11; j++)
    {
        ChildWeightPounds.Items.Add( new ListItem(j.ToString(),j.ToString()));
    }
}

dropdownlist例を実行しないと、値がの間違った時間にに挿入されている可能性があります。そのlifecycleため、背後のコードで選択した値にアクセスしようとすると、機能しません。

あなたを助けるかもしれないasp.netライフサイクルに関する次の記事を考えてみてください。

于 2012-10-09T18:52:53.817 に答える
1

AutoPostBack="true"ドロップダウンリストを調整して、定義することができますOnSelecIndexChanged event

    <asp:DropDownList ID="ChildWeightPounds" runat="server"
         OnSelectedIndexChanged="DropDownListSelected" AutoPostBack="true>
         <asp:ListItem Value="">-Select-</asp:ListItem>
    </asp:DropDownList>

コードビハインド

void DropDownListSelected(Object sender, EventArgs e)
{
 var value =  ChildWeightPounds.SelectedValue;
}
于 2012-10-09T18:52:15.477 に答える