如何从.ascx上的page_load访问EditItemTemplate

本文关键字:load 访问 EditItemTemplate page 上的 ascx | 更新日期: 2023-09-27 18:02:44

我在usercontrol.ascx上有以下代码

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="OrderStatusEdit.ascx.cs" Inherits="Admin_Controls_OrderStatusEdit" %>
<asp:FormView ID="fvwOrderStatus" runat="server" OnModeChanging="fvwOrderStatus_ModeChanging" OnItemUpdating="fvwOrderStatus_ItemUpdating" OnDataBound="fvwOrderStatus_DataBound" OnPreRender="fvwOrderStatus_PreRender">
    <ItemTemplate>
        <%# WebUtils.GetLocString((string)Eval("Status")) %>
        <asp:Button ID="btnEdit" runat="server" SkinID="Buttons" CommandName="Edit" Text="<%$ Resources:Common,Edit %>" />
    </ItemTemplate>
    <EditItemTemplate>
        <asp:DropDownList ID="ddlStatus" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlStatus_OnSelectedIndexChanged"  DataTextField="DisplayStatus" DataValueField="StatusId">
        </asp:DropDownList>
        <asp:Button ID="btnUpdate" runat="server" SkinID="Buttons" Text="<%$ Resources:Common,Update %>"  CommandName="Update" />
        <asp:Button ID="btnCancel" runat="server" SkinID="Buttons" Text="<%$ Resources:Common,Cancel %>" CommandName="Cancel" CausesValidation="false" />
    </EditItemTemplate>
</asp:FormView>

我在page.aspx上使用了这个控件

我的问题如何禁用btnUpdate在Page_Load功能所以我怎么能访问按钮控制(<asp:Button ID="btnUpdate")存在于EditItemTemplateasp:FormView

protected void Page_Load(object sender, EventArgs e)
    {
        //Here I need to Access btnUpdate ?! 
    }

如何从.ascx上的page_load访问EditItemTemplate

你不能直接从用户控件的父页面访问用户控件的子控件,因为子控件是由protected关键字修改的,这意味着它们只能由它们的类或继承的类访问。

在用户控件本身上有一个Page_Load方法,但是你不能用它来访问btnUpdate,因为它包含在FormView的EditItemTemplate中。你应该,然而,能够使用FormView的数据绑定事件(它似乎你已经基于你的标记服务),像这样:

protected void fvwOrderStatus_DataBound(object sender, System.EventArgs e)
{
    if(FormView1.CurrentMode == FormViewMode.Edit)
    {
        Button btnUpdate = FindControl("btnUpdate") as Button;
        btnUpdate.Enabled = true;
    }
}