gpt4 book ai didi

c# - ASP :dropdownlist is null on page_load

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

我有一个ascx控件;

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LanguageSelect.ascx.cs" Inherits="MyNamespace.LanguageSelect" %>

后面有代码:

protected void Page_Load(object sender, EventArgs e)
{
Languages = GetSiteLanguagesService();
if (Languages.Count > 1)
{

//null reference exception here!! languageDropdown is null!
LanguageDropdown.Visible = true;
LanguageDropdown.DataTextField = "DisplayName";
LanguageDropdown.DataValueField = "LangUrl";
LanguageDropdown.DataSource = Languages ;
LanguageDropdown.DataBind();
}
}

在另一个控件中:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SomePage.ascx.cs" Inherits="myNamespace.SomePage" %>
<div id="main" role="main">
<myTag:LanguageSelect id="langSelect" runat="server" />
<div class="section columns">
<div class="main-column"> ....

使用调试器,我点击了 LanguageSelect 的 page_load,但下拉列表为空!如果我在标记中添加下拉控件,我认为它应该始终存在,在这种情况下它的行为就像它只是一个动态控件..

现在,控件 SomePage 正在 html 中呈现,但是 myTag 中的这个控件根本没有呈现,如果我将下拉列表包装在 div 中,div 并不重要也不会被渲染!!

如果我将断点放在 SomePage page_load 中,lan​​gSelect 控件将在那里(不是 null),但它本身有一个 null LanguageDropdown

最佳答案

  1. 您的 UserControl 是否动态添加到页面?我问是因为人们有时会忘记他们必须通过 Page.LoadControl 创建它的一个实例而不是使用构造函数。
  2. 您是否在页面中注册了 UserControl?

例如:

<%@ Register TagPrefix="uc1" TagName="Lang" Src="controls/LanguageSelect.ascx" %>

旁注:使用页面事件隐式初始化 UserControl 几乎总是一个坏主意。相反, Controller (通常是页面)应该直接初始化控件(通过调用 BindDataInit 之类的方法)。否则可能会导致生命周期问题或严重错误。

关于c# - ASP :dropdownlist is null on page_load,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620361/

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