占位符内的ascx控件如何读取其父控件/页面的属性

时间:2013-01-13 21:16:48

标签: c# asp.net dotnetnuke

我有一个父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文件夹,该文件夹不是资源文件所在的位置。我可以通过将子控件放在与父级相同的文件夹中来解决这个问题。

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

0 个答案:

没有答案