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