我有一个父 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 文件夹,该文件夹不是资源文件所在的位置。同样,我可以通过将子控件与父控件放在同一文件夹中来解决此问题。
有没有办法解决上述问题?谢谢