나는 이것에 대한 몇 가지 다른 예를 읽었으며 asp.net 페이지 수명주기를 완전히 이해하지 못하는 사람들에게는 분명한 초보자 용 질문 인 것 같습니다. . 고치려는 내 시도가 하나도 빠져 나가지 않았습니다.코드에서 dropdownlist의 값이 잘못됨
영문 :
...
<%
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을, 데이터 바인딩() 문제를 매우 분명하다입니다. 하지만, 모든 컨트롤을 반복하고, 텍스트 박스, 체크 박스, 체크 박스리스트가 모두 정상적으로 작동하고, 필드에서 값을 제공한다는 점이 이해가되지 않습니다. 드롭 다운리스트가 내게 값을주지 않는 이유가 있습니다.
OnSelectedIndexChanged 이벤트를 사용해 보았습니다. DataBind() 함수를 사용해 보았습니다.하지만 이것들을 가지고 놀아 보았지만 여전히 값을 얻지 못했습니다.
골드! 이거 야. 감사! 불행히도 .cs 파일에 for 루프를 넣는 것은 매우 깨끗해 보이지 않습니다. e.i. 나는 필드 (textfields, checkboxes, dropdowsn, 등)의 무리를 가지고 있으며 각각은 .aspx 파일에 만들어져 표시된다. 일부 DropDownLists에는 멋진 반복 패턴이 포함되어 있으므로 <% for()...%>을 사용하여 항목을 인라인으로 추가하는 것이 좋습니다. 코드 뒤에서 DropDownLists 항목을 작성하면 임의로 나타납니다. 이 일을 할 수있는 깨끗한 방법이 있습니까? 그것은 또한 제가 기대하는 가치를 제공합니다. 다시 한 번 감사드립니다! – russds
@russds 도움이 된 것을 기쁘게 생각합니다. asp.net에서 코드 및 마크 업 분리라는 개념이 마음에 들지 않으면 오르막 전투에 들어간 것입니다. 그것은 기본적으로 설립 원칙 중 하나입니다. ASP 배경에서 나온 경우 어떻게 '다르게'보일 수 있지만 둘 다 내 경험으로는 개념이 분리로 더 잘 작동한다는 것은 의문의 여지가 없습니다.하나의 파일이 페이지의 내용을 정의하고, 다른 하나는 작동 방법을 정의하는 것으로 생각하십시오. –
@russds 마크 업과 함께 기능을 정의하려는 경우 ASP.NET MVC (모델 뷰 컨트롤러)를 살펴볼 수 있습니다. 자신의 스타일에 더 잘 어울릴 수 있습니다. –