我讀過的這幾個不同的例子,這似乎是對那些不完全瞭解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()函數嘗試過,但這些玩,還沒有得到我的價值。
金!就是這個。謝謝!不幸的是把for循環放在.cs文件中看起來不太乾淨。 E.I.我有一堆字段(textfields,checkboxes,dropdowsn等),每個字段都被構建並顯示在.aspx文件中。一些DropDownLists包含很好的重複模式,因此使用<% for()...%>直接添加內聯項是有意義的。在後面的代碼中構建DropDownLists項目隨機出現。有沒有一個乾淨的方式來做到這一點,這也給我我期望的價值?再次感謝! – russds
@russds很高興幫助。如果您不喜歡asp.net中的代碼和標記分離概念,那麼您將面臨艱辛的戰鬥。它基本上是創始原則之一。如果你來自ASP背景,我可以看到它是如何「不同」的,但最終(根據我對兩者的經驗),毫無疑問,這個概念在分離方面效果更好。把它看作一個文件定義頁面上的內容,另一個文件定義它是如何工作的。 –
@russds如果你喜歡用你的標記定義功能,你可能想看看ASP.NET MVC(模型視圖控制器)。可能會更適合你的風格。 –