私は次のIndex.aspxWebフォームを持っています:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="ProblematicWebApplication.Index" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<asp:Label ID="dummyLabel" runat="server" Text="This is dummy label." />
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="intDropDownList" runat="server"/>
<br />
<asp:Button Text="Submit" OnClick="OnSubmitClicked" runat="server"/>
<br />
Selected value: <asp:Label ID="selectedValueLabel" runat="server" />
</div>
</form>
</body>
</html>
そして、Index.aspx.csファイルの背後にある次のコード:
using System;
using System.Linq;
namespace ProblematicWebApplication
{
public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.intDropDownList.DataSource = Enumerable.Range(0, 11).ToArray();
this.intDropDownList.DataBind();
}
if (this.Request["remove-dummy"] != null)
this.Controls.Remove(this.dummyLabel);
}
protected void OnSubmitClicked(object sender, EventArgs e)
{
this.selectedValueLabel.Text = this.intDropDownList.SelectedValue;
}
}
}
クエリ文字列にremove-dummyパラメータを指定せずにアプリケーションを実行し、intDropDownListから値を選択して[送信]ボタンをクリックすると、選択した値がselectedValueLabelに表示されます。
しかし、クエリ文字列にremove-dummy = 1パラメータを指定してアプリケーションを実行すると、dummyLabelが削除されます。これで、intDropDownListから値を選択して[送信]ボタンをクリックすると、選択した値がselectedValueLabelに正しく書き込まれず、intDropDownListのすべてのアイテムが削除されます。
なぜこれが起こっているのか誰かが私にそれを説明できますか?無関係なdummyLabelコントロールを削除すると、intDropDownListコントロールに影響するのはなぜですか?