Пользовательский элемент управления веб-форм ASP.NET с SelectedIndex DropDownList не может быть установлен
Я создал пользовательский элемент управления веб-форм с DropDownList. я хочу измениться SelectedIndex
собственностью DropDownList1
изменить выбранный индекс.
WebUserControl1.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.ControlUI.WebUserControl1" %>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
WebUserControl1.ascx.cs:
using System;
namespace WebApplication1.ControlUI
{
public partial class WebUserControl1 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e) {
if (IsPostBack) return;
for (int i = 1; i <= 5; i++) {
DropDownList1.Items.Add("Test: " + i.ToString());
}
}
public void SetSelectedIndex(int index) {
DropDownList1.SelectedIndex = index;
}
}
}
Сейчас я использую пользовательский элемент управления на странице.
Default.aspx:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>
<%@ Register Src="~/ControlUI/WebUserControl1.ascx" TagPrefix="uc1" TagName="WebUserControl1" %>
<asp:Content ID="HeadContent" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<uc1:WebUserControl1 runat="server" id="WebUserControl1" />
</asp:Content>
Default.aspx.cs:
using System;
using System.Web.UI;
namespace WebApplication1
{
public partial class Default : Page
{
protected void Page_Load(object sender, EventArgs e) {
WebUserControl1.SetSelectedIndex(3);
}
}
}
Это не работает. Он присваивает -1 в SelectedIndex
собственностью DropDownList1
, Но пользовательский элемент управления работает, если я добавляю элементы в DropDownList в разметке (WebUserControl1.ascx
), а не в файле codebehind (WebUserControl1.ascx.cs
):
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.ControlUI.WebUserControl1" %>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>Test: 1</asp:ListItem>
<asp:ListItem>Test: 2</asp:ListItem>
<asp:ListItem>Test: 3</asp:ListItem>
<asp:ListItem>Test: 4</asp:ListItem>
<asp:ListItem>Test: 5</asp:ListItem>
</asp:DropDownList>
Но мне нужно добавить элементы, используя файл codebehind, а не в файле разметки. Почему это не работает? Как решить проблему?
1 ответ
Проблема в том, что Page_Load
для страницы, содержащей пользовательский элемент управления (по умолчанию), выполняется раньше Page_Load
для пользовательского элемента управления (WebUserControl1). Поэтому, когда SetSelectedIndex
вызывается со страницы, в раскрывающемся списке нет ни одного элемента списка при первом построении страницы.
Вы можете решить проблему очень просто, создав элемент списка для раскрывающегося списка в Init
этап жизненного цикла управления пользователем, а не в Load
этап:
protected void Page_Init(object sender, EventArgs e) {
if (IsPostBack) return;
for (int i = 1; i <= 5; i++) {
DropDownList1.Items.Add("Test: " + i.ToString());
}
}