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 プロパティにアクセスしようとすると、コードが親コントロールではなく子コントロールの隠しフィールドを探していることです。これに対する私の解決策の 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 フォルダーも含まれます。ここでも、子コントロールを親コントロールと同じフォルダーに配置することで、これを修正できます。

上記の問題を解決する方法はありますか?ありがとう

4

0 に答える 0