私はこれを理解するのに苦労しています。皆さんが私を助けてくれることを願っています。
別のクラスであると呼ばれるページがあります(他のページで使用されるため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
と、ページはフォームアクションページに送信されます。
他のページで問題が始まります。このページに投稿されたパラメーターを取得し、そのうちの1つがddlist
値です。すぐにウィンドウで値を確認します。値が1であるとしましょう。
長い話を短くするために、私はこのコードを持っています:
agendamentos.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に再度変更します。上記の同じコードをデバッグすると、が1になっていることがわかりlocais.SelectedIndex
ます。ここでも、通常どおり2に設定しても、効果はありません。ddlist
もう一度3に変更すると、SelectedIndex
は2になり、値3を取りません。
つまり、新しくロードされたページのインデックスの値は、以前にロードされたページの値です。
助けてくれませんか?