You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

后台代码设置Div字体加粗报错:对象引用未设置到实例

问题分析与解决方案

报错原因

你的dvLock控件大概率位于数据绑定控件(如GridView、FormView、Repeater等)的模板(ItemTemplate/EditItemTemplate)内部。这类模板中的服务器控件只会在数据绑定控件执行DataBind()后,逐行/逐项实例化。在Page_Load事件阶段,模板还未渲染,控件实例尚未创建,直接访问就会抛出“对象引用未设置到实例”的错误。

如果控件不在模板内,也可能是母版页/ContentPlaceHolder的命名容器问题,导致直接访问不到控件实例。


解决方案

情况1:dvLock在数据绑定控件模板内

以GridView为例,需在数据绑定控件的ItemDataBound事件中处理控件:

后台C#代码

// GridView的RowDataBound事件处理方法
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // 仅处理数据行(排除表头、表尾)
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        HtmlGenericControl dvLock = (HtmlGenericControl)e.Row.FindControl("dvLock");
        if (dvLock != null && User.Id == "B")
        {
            dvLock.Style["font-weight"] = "bold";
        }
    }
}

前端代码(绑定事件)

确保数据绑定控件注册对应事件:

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
    <ItemTemplate>
        <!-- 你的dvLock代码 -->
        <div id="dvLock" runat="server" class="col-md-8" style="border-bottom:inherit;">
            <span ID="DisplyHelpTextLocked" runat="server" visible='<%# (Eval("Parent.BlockReclass").ToString() == "ZL") %>'>
                Click this option to remove. Future authorizations will be allowed effective immediately.
                <br /> 
                <br />
            </span>
        </div>
    </ItemTemplate>
</asp:GridView>

情况2:dvLock是页面直接控件(不在模板内)

如果控件是页面级直接控件,需通过命名容器查找(比如母版页的ContentPlaceHolder):

protected void Page_Load(object sender, EventArgs e)
{
    if (User.Id == "B")
    {
        // 替换为你的ContentPlaceHolderID
        ContentPlaceHolder content = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
        HtmlGenericControl dvLock = (HtmlGenericControl)content.FindControl("dvLock");
        
        if (dvLock != null)
        {
            dvLock.Style["font-weight"] = "bold";
        }
    }
}

额外提示

  • 模板内的控件绝对不能在Page_Load、Page_Init等早期页面生命周期事件中直接访问,必须等待数据绑定控件完成项实例化后,在对应的ItemDataBound类事件中处理。
  • 使用FindControl时,必须定位到正确的命名容器(如数据行、数据项),否则会找不到控件。

内容的提问来源于stack exchange,提问作者VimalSingh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:47:15