非表示フィールドといくつかのパブリック プロパティが定義されている親 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 プロパティにアクセスしようとすると、コードが親コントロールではなく子コントロールの隠しフィールドを探していることです。これに対する私の解決策の 1 つは、すべての子供に対してこれを行うことです。
var hidfld = (HiddenField)this.Parent.FindControl("hidAcctID");
int id = Convert.ToInt32(hidfld.Value);
これは正常に機能しますが、多くの重複コードです
2 番目の問題: 親コントロールとリソース ファイルが
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 フォルダーも含まれます。ここでも、子コントロールを親コントロールと同じフォルダーに配置することで、これを修正できます。
上記の問題を解決する方法はありますか?ありがとう