gpt4 book ai didi

c# - 下拉列表未在 UpdatePanel 中更新

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:59 25 4
gpt4 key购买 nike

我创建了一个简单的页面,其中的 UpdatePanel 中有两个下拉列表。当第一个下拉列表更改选择时,它应该更新第二个下拉列表的列表,但它不起作用,我不确定我做错了什么。

我收到以下错误:在 UpdatePanel“HeadUpdatePanel”中找不到 ID 为“ctl00 $ MainContent $ FunctionCombo”的控件。

即便如此,当我单步执行它时仍会发现它并不为空。看到这一行:

DropDownList dd = (DropDownList)cph.FindControl("FunktionCombo");

但是当它尝试应用触发器时出现此错误:

trigger.ControlID = cph.FindControl("FunktionCombo").UniqueID;

仅供引用:母版页没有内容,只是调用测试页!

这是我的 TestPage 代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/Main.Master" AutoEventWireup="true" CodeBehind="TestPage.aspx.cs" Inherits="Test.TestPage" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<asp:ScriptManager ID="ScriptManager" runat="server" />

<div class="container">
<div>
<asp:UpdatePanel ID="HeadUpdatePanel" UpdateMode="Always" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Wähle Funktion:" />&nbsp;
<asp:DropDownList ID="FunktionCombo" OnSelectedIndexChanged="FunktionCombo_SelectionChanged" AutoPostBack="true" runat="server" />&nbsp;&nbsp;&nbsp;
<asp:Label ID="Label2" runat="server" Text="Wähle Tabelle:" />&nbsp;
<asp:DropDownList ID="TabelleCombo" OnSelectedIndexChanged="TabelleCombo_SelectionChanged" AutoPostBack="true" runat="server" />&nbsp;&nbsp;&nbsp;
<asp:Label ID="CountLbl" runat="server" Text="Wähle Funktion:" />
<asp:Button ID="StartBn" runat="server" Text="Start" onclick="StartBtn_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
</asp:Content>


using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Test
{
public partial class TestPage : System.Web.UI.Page
{

private List<ViewInfo> _ospList;
private List<ViewInfo> _aeList;
private List<ViewInfo> _icList;

private bool _functionChanged = false;
private string _currentFunctionDisplay = "";

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
HttpContext.Current.Session["IsAdmin"] = true;
HttpContext.Current.Session["IsSubAdmin"] = true;

CreateComboLists();

ContentPlaceHolder cph = (ContentPlaceHolder)this.Master.FindControl("MainContent");
UpdatePanelControlTrigger trigger = new PostBackTrigger();
DropDownList dd = (DropDownList)cph.FindControl("FunktionCombo");
trigger.ControlID = cph.FindControl("FunktionCombo").UniqueID;

HeadUpdatePanel.Triggers.Add(trigger);
}
}

private void CreateComboLists()
{
if ((bool)HttpContext.Current.Session["IsAdmin"] == true)
{
FunktionCombo.Items.Add("OSP");
FunktionCombo.Items.Add("AE");
FunktionCombo.Items.Add("IC");
FunktionCombo.DataBind();
FunktionCombo.SelectedIndex = 0;

_ospList = GetSprocList("OSP", (HttpContext.Current.Session["IsAdmin"] != null) ? (bool)HttpContext.Current.Session["IsAdmin"] : false, (HttpContext.Current.Session["IsSubAdmin"] != null) ? (bool)HttpContext.Current.Session["IsSubAdmin"] : false);
_aeList = GetSprocList("AE", (HttpContext.Current.Session["IsAdmin"] != null) ? (bool)HttpContext.Current.Session["IsAdmin"] : false, (HttpContext.Current.Session["IsSubAdmin"] != null) ? (bool)HttpContext.Current.Session["IsSubAdmin"] : false);
_icList = GetSprocList("IC", (HttpContext.Current.Session["IsAdmin"] != null) ? (bool)HttpContext.Current.Session["IsAdmin"] : false, (HttpContext.Current.Session["IsSubAdmin"] != null) ? (bool)HttpContext.Current.Session["IsSubAdmin"] : false);

TabelleCombo.DataSource = _ospList;
TabelleCombo.DataTextField = "ViewName";
TabelleCombo.DataValueField = "SprocName";
TabelleCombo.SelectedIndex = 0;
TabelleCombo.DataBind();
}
}

protected void FunktionCombo_SelectionChanged(object sender, System.EventArgs e)
{
DropDownList obj = (DropDownList)sender;

TabelleCombo.DataSource = null;
_functionChanged = true;

if (FunktionCombo.SelectedValue.ToString() == "OSP")
{
TabelleCombo.DataSource = _ospList;
TabelleCombo.DataTextField = "ViewName";
TabelleCombo.DataValueField = "SprocName";
_currentFunctionDisplay = "OSP";
}
else if (FunktionCombo.SelectedValue.ToString() == "AE")
{
TabelleCombo.DataSource = _aeList;
TabelleCombo.DataTextField = "ViewName";
TabelleCombo.DataValueField = "SprocName";
_currentFunctionDisplay = "AE";
}
else if (FunktionCombo.SelectedValue.ToString() == "IC")
{
TabelleCombo.DataSource = _icList;
TabelleCombo.DataTextField = "ViewName";
TabelleCombo.DataValueField = "SprocName";
_currentFunctionDisplay = "IC";
}

TabelleCombo.DataBind();
TabelleCombo.SelectedIndex = 0;
SetCountText();
}

protected void TabelleCombo_SelectionChanged(object sender, System.EventArgs e)
{
DropDownList obj = (DropDownList)sender;
}

private void SetCountText(string text = "")
{
CountLbl.Text = TabelleCombo.SelectedValue.ToString();
}

public static List<ViewInfo> GetSprocList(string function, bool isAdmin, bool isSubAdmin, bool infoPanel = false)
{
List<ViewInfo> sl = new List<ViewInfo>();

switch (function)
{
case "OSP":
sl.Add(new ViewInfo("First Meetings Set", "sp_Activity_OSP_First"));
sl.Add(new ViewInfo("Contacts", "sp_Activity_OSP_Contact"));
return sl;

case "AE":
sl.Add(new ViewInfo("Dials", "sp_Activity_AE_Dials"));
sl.Add(new ViewInfo("Dials Daily", "sp_Activity_AE_Dials_Daily"));
return sl;

case "IC":
sl.Add(new ViewInfo("Monthly Activity Callstatus", "sp_Activity_IC_CallStatus"));
return sl;

default:
sl.Add(new ViewInfo("First Meetings Set", "sp_Activity_OSP_First"));
sl.Add(new ViewInfo("Contacts", "sp_Activity_OSP_Contact"));
return sl;
}
}
}

public class ViewInfo
{
public string ViewName { get; set; }
public string SprocName { get; set; }
public string ExtraName { get; set; }
public List<ViewInfo> ViewList { get; set; }

public ViewInfo()
{
this.ViewName = "";
this.SprocName = "";
}

public ViewInfo(string name, string sproc, string extraName = "")
{
this.ViewName = name;
this.SprocName = sproc;
this.ExtraName = extraName;
}
}
}

我很感激在这方面的任何帮助。

最佳答案

好的,我找到了问题,我很抱歉,因为它太愚蠢了。首要问题:我删除了不需要的触发器,因为触发它的 DDL 位于 Updatepanel 中,它解决了该问题。

第二期:当我将 DataSource 应用于 FunktionCombo_SelectionChanged 内的 DDL 时,该列表为空,因为我忘记它会被回发删除。

所以我只是在运行时创建列表,现在它可以工作了。

_ospList = SprocEvaluator.GetSprocList("OSP", (HttpContext.Current.Session["IsAdmin"] != null) ? (bool)HttpContext.Current.Session["IsAdmin"] : false, (HttpContext.Current.Session["IsSubAdmin"] != null) ? (bool)HttpContext.Current.Session["IsSubAdmin"] : false);
TabelleCombo.DataSource = _ospList;

再次抱歉,但感谢您的所有帮助!

关于c# - 下拉列表未在 UpdatePanel 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46685682/

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