Listbox вызывает отдельную обратную передачу для текстового поля
Шаг, чтобы повторить проблему
Сначала введите текст в текстовое поле, но не вводите ввод. Затем выберите другой индекс в списке. Наконец, обратите внимание, что оба идентификатора (список и текстовое поле) будут отображаться в цели события.
Ожидаемый результат. Только один идентификатор будет отображаться в целевом объекте события, который инициализирует его = список при выбранном изменении индекса.
Вот код:
<TextBox ID="TextBox1" runat="server" AutoPostBack="True"></asp:TextBox>
<ListBox ID="ListBox1" runat="server" AutoPostBack="True" onselectedindexchanged="ListBox1_SelectedIndexChanged">
<asp:ListItem Text="0" Value="0"></asp:ListItem>
<asp:ListItem Text="1" Value="1"></asp:ListItem>
<asp:ListItem Text="2" Value="2"></asp:ListItem>
</ListBox>
protected void Page_Load(object sender, EventArgs e){
if (IsPostBack)
{
string target = Request["__EVENTTARGET"] as string;
System.Windows.Forms.MessageBox.Show("__EVENTTARGET: " + target);
}
}
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
1 ответ
Если в вашем текстовом поле есть AutoPostBack
свойство установлено в true
, текстовое поле будет вызывать PostBack, когда он теряет фокус. Это по замыслу. Смотрите документы.
Таким образом, вы получаете идентификатор текстового поля там на самом деле ожидаемое поведение. Если вы не хотите этого, не устанавливайте текстовое поле AutoPostBack
собственность на true
,