gpt4 book ai didi

c# - DropDownList 不接受我试图分配的 SelectedIndex

转载 作者:太空宇宙 更新时间:2023-11-03 11:15:38 24 4
gpt4 key购买 nike

我很难弄清楚这个问题,希望你们能帮助我。

我有一个名为 Index.aspx 的页面,其中有一个 DropDownList,它是一个单独的 UserControl 类(因为它将在其他页面中使用).这是相关代码:

UcSelecionarLocal.ascx:

<%@ Control Language="C#" AutoEventWireup="true" 
CodeBehind="UcSelecionarLocal.ascx.cs"
Inherits="QuickMassage.uc.UcSelecionarLocal" %>
<asp:DropDownList ID="ddlLocais" runat="server"
CssClass="span4 dropdown-toggle" AutoPostBack="true">
</asp:DropDownList>

UcSelecionarLocal.ascx.cs:

public partial class UcSelecionarLocal : UserControl {

protected void Page_Load(object sender, EventArgs e) {
if (!this.IsPostBack) {
PreencherLocais();
}
}

private void PreencherLocais() {
ddlLocais.Items.Clear();
ddlLocais.Items.Add(new ListItem("Selecione", "0"));
ControleLocal controle = new ControleLocal();
DataTable tab = controle.ListarLocais();
foreach (DataRow row in tab.Rows) {
ddlLocais.Items.Add(new ListItem(row["Descricao"].ToString(),
row["ID"].ToString()));
}
}

此控件位于 Index.aspx 中并正确加载其值。它包含的表单将操作设置为 agendamentos.aspx。当我更改 ddlist 时,页面会按应有的方式提交到表单操作页面。

在另一页上,问题开始了:我得到了发布到该页的参数,其中一个是 ddlist 值。在即时窗口中,我检查了值,它就在那里,假设它是 1。

长话短说,我有这段代码:

议程.aspx.cs:

protected void Page_Load(object sender, EventArgs e) {
DropDownList locais = ObterComponenteListaLocais();
try {
locais.SelectedIndex =
int.Parse(HttpContext.Current.Request["ucSelLocal$ddlLocais"]);
}

调试时,我看到 locais.SelectedIndex 是 -1。分配后它仍然是-1。页面加载,然后我再次将 ddlist 值更改为 2。在调试上面的相同代码时,我看到 locais.SelectedIndex 现在是 1。再次设置它到 2,因为它通常会产生任何效果。如果我再次将 ddlist 更改为 3,则 SelectedIndex 变为 2 并且不采用值 3。

换句话说:新加载页面中的索引值是之前加载页面的值。

你们能帮帮我吗?

最佳答案

这是因为 Page_Load 事件在加载用户控件之前在您的页面中触发。这样做:

public partial class UcSelecionarLocal : UserControl
{

protected void Page_Load(object sender, EventArgs e)
{
}

public void PreencherLocais()
{
ddlLocais.Items.Clear();
ddlLocais.Items.Add(new ListItem("Selecione", "0"));
ControleLocal controle = new ControleLocal();
DataTable tab = controle.ListarLocais();
foreach (DataRow row in tab.Rows)
{
ddlLocais.Items.Add(new ListItem(row["Descricao"].ToString(), row["ID"].ToString()));
}
}
}

然后在你的aspx页面中:

protected void Page_Load(object sender, EventArgs e) 
{
if (!IsPostBack)
this.idOfYourUserControl.PreencherLocais();

DropDownList locais = ObterComponenteListaLocais();
try {
locais.SelectedIndex =
int.Parse(HttpContext.Current.Request["ucSelLocal$ddlLocais"]);
}
}

此外,由于您的问题有点令人困惑,重要的一点是 Page_Load 在从回发数据的控件捕获数据之前触发。所以那不是获取他们信息的好地方,因为它将是以前的样子。这就是为什么您需要创建一个函数,该函数会在按钮单击之类的事件上触发,该函数将在加载控件数据后执行。

关于c# - DropDownList 不接受我试图分配的 SelectedIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com