0

我有一个父 ascx 控件,它有一个隐藏字段和一些定义的公共属性。它还有一个占位符,用于在运行时插入一些动态子控件。所有子控件都继承自父控件,因此这些公共属性可供它们使用。这是父级的 ascx 代码;

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

<asp:hiddenField id="hidAcctID" value="-1" runat="server" />
<div id="myaccountcontainer">
  <asp:PlaceHolder ID="phdContent"  runat="server"></asp:PlaceHolder>
</div>

这是父母的代码

 partial class MyAccount : PortalModuleBase
    {
        #region Public Properties
        public string SharedResourcesFile 
        { 
            get 
            { 
                return ControlPath + "App_LocalResources/SharedResources.resx"; 
            } 
        }

        public int AccountId
        {
            get
            {
                int id;
                Int32.TryParse(this.hidAcctID.Value, out id);
                return id > 0 ? id : -1;
            }
            set
            {
                hidAcctID.Value = value.ToString();
            }
        }
 ...

我遇到的第一个问题是当我尝试从子控件访问 AccountId 属性时,代码正在子控件而不是父控件中查找隐藏字段。我对此的解决方案之一是对每个孩子都这样做;

 var hidfld = (HiddenField)this.Parent.FindControl("hidAcctID");
 int id = Convert.ToInt32(hidfld.Value);

这工作正常,但它有很多重复的代码

第二个问题:父控件和资源文件位于

www.example.com/DesktopModules/ModuleName/Parent.ascx

www.example.com/DesktopModules/ModuleName/App_LocalResources/SharedResources.resx

而子控件位于

www.example.com/DesktopModules/ModuleName/ChildControls/Child1.ascx

当我从子控件访问 SharedResourcesFile 属性(返回资源文件的位置)时,返回的路径还包括 ChildControls 文件夹,该文件夹不是资源文件所在的位置。同样,我可以通过将子控件与父控件放在同一文件夹中来解决此问题。

有没有办法解决上述问题?谢谢

4

0 回答 0