2016-10-24 5 views
0

저는 ASP.NET을 처음 사용합니다. 후속 질문으로 THIS POST에서 내 웹 페이지 템플릿에 표시하고 싶은 Ektron에서 다음과 같은 .Net 컨트롤이 있습니다.템플릿에 내 .NET 컨트롤 삽입

제어 :

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Gallery.ascx.cs" Inherits="Source_Controls_Alumni_Gallery" %> 
<asp:ListView ID="uxPhotoGallery" runat="server" ItemPlaceholderID="itemPlaceholder"> 
    <LayoutTemplate> 
     <ul> 
      <asp:PlaceHolder ID="itemPlaceholder" runat="server" /> 
     </ul> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <li> 
      <%-- 
       I'm mixing up two different ways of referencing the incoming data. One is by casting 
       the DataItem to the incoming type, which gives you intellisense access to the properties. 

       The other is more of a dictionary approach in which you have to type out the property name 
       as a string. 

       I really like the casting approach, but it's mega-wordy. 
       --%> 
      <a href="<%#((Ektron.Custom.ViewModels.PressPhotoViewModel)Container.DataItem).ImageUrl %>"> 
       <img src="<%#((Ektron.Custom.ViewModels.PressPhotoViewModel)Container.DataItem).ImageUrl %>" alt="<%#Eval("Description") %>" /> 
       <div><%#Eval("Description") %></div> 
      </a> 
     </li> 
    </ItemTemplate> 
</asp:ListView> 

뒤에 코드 :

using Ektron.Custom.SmartForms; 
using System; 
using System.Linq; 

public partial class Source_Controls_Alumni_Gallery : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     var pressPhotoManager = new PressPhotoManager(); 

     // Whichever folder Id... 
     var photos = pressPhotoManager.GetList(75); 

     if (photos != null && photos.Any()) 
     { 
      uxPhotoGallery.DataSource = photos; 
      uxPhotoGallery.DataBind(); 
     } 
    } 
} 

나는이 템플릿에 컨트롤을 삽입 할 :

<%@ Page Title="" Language="C#" MasterPageFile="~/Source/Masterpages/MainMaster.master" AutoEventWireup="true" CodeFile="AlumniJobOpenings.aspx.cs" Inherits="Source_Templates_AlumniJobOpenings" %> 

<%@ Register Src="~/Source/Controls/SubHeader.ascx" TagPrefix="uc1" TagName="SubHeader" %> 
<%@ Register Src="~/Source/Controls/Shared/PrimarySection.ascx" TagPrefix="uc1" TagName="PrimarySection" %> 
<%@ Register Src="~/Source/Controls/JoinUs/StaffAndParalegals/SPOpenings.ascx" TagPrefix="uc1" TagName="SPOpenings" %> 
<%@ Register Src="~/Source/Controls/JoinUs/StaffAndParalegals/SPFilters.ascx" TagPrefix="uc1" TagName="SPFilters" %> 
<%@ Register Src="~/Source/Controls/Shared/RelatedContentModules.ascx" TagPrefix="uc1" TagName="RelatedContentModules" %> 
<%@ Register Src="~/Source/Controls/JoinUs/StaffAndParalegals/SPContactDetails.ascx" TagPrefix="uc1" TagName="SPContactDetails" %> 
<%@ Register Src="~/Source/Controls/Shared/TextImageAssetBlockModules.ascx" TagPrefix="uc1" TagName="TextImageAssetBlockModules" %> 
<%@ Register Src="~/Source/Controls/Shared/TextLinkBlockControl.ascx" TagPrefix="uc1" TagName="TextLinkBlockControl" %> 
<%@ Register TagPrefix="sp" TagName="Spinner" Src="~/Source/Controls/Alumni/Gallery.ascx" %> 




<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
    <uc1:SubHeader runat="server" ID="SubHeader" /> 
    <div class="container non-responsive"> 
     <div class="row"> 
      <div class="col-sm-8 alpha"> 
       <uc1:PrimarySection runat="server" ID="PrimarySection" /> 
       <div class="primary"> 
        <div class="container non-responsive"> 
         <div class="row"> 
          <div class="col-sm-8 alpha"> 
           <div class="primary"> 
            IMAGE GALLERY LIST SHOULD BE INSERTED HERE. 
           </div> 
          </div> 
          <div class="col-sm-4 beta"> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
      <div class="col-sm-4 beta"> 
       <uc1:SPContactDetails runat="server" ID="SPContactDetails" /> 
       <uc1:SPFilters runat="server" ID="SPFilters" Heading="Staff and Paralegal Openings" Text="Select an office below to learn more about current opportunities" /> 
       <uc1:RelatedContentModules runat="server" ID="RelatedContentModules" /> 
       <uc1:TextLinkBlockControl runat="server" ID="TextLinkBlockControl" /> 
       <uc1:TextImageAssetBlockModules runat="server" ID="TextImageAssetBlockModules" /> 
      </div> 
     </div> 
    </div> 
</asp:Content> 

답변

1

여기에 상단에서 당신의 라인입니다 :

<%@ Register TagPrefix="sp" TagName="Spinner" Src="~/Source/Controls/Alumni/Gallery.ascx" %> 

그리고 같은 페이지에있는 다른 컨트롤을 등록하는 데 사용되는 유사한 라인 : 이제

<%@ Register Src="~/Source/Controls/SubHeader.ascx" TagPrefix="uc1" TagName="SubHeader" %> 

는, 위에서 언급 한 기존 항목의 제어 위치를보십시오. 당신이 확인할 수있는 것들

<uc1:SubHeader runat="server" ID="SubHeader" /> 

는 위치 태그는 <%@ Register ... %> 라인의 구성 속성들로 구성되어 있다는 점이다. 특히, TagPrefix 및 TagName 값 이 형식 다음, 자신의 제어 위치를 설정하기 위해이 값을 사용합니다 :

<TagPrefix:TagName runat="server" ID="SomeUniqueID" [optional parameters] /> 

그래서, 컨트롤의 경우, 당신은 TagPrefix="sp"TagName="Spinner"을 설정했습니다. 그래서 제어 위치는 다음과 같이 표시됩니다

<sp:Spinner runat="server" ID="uxAlumniSpinner" /> 

(ID는 예입니다) 컨트롤 코드에서

을, 당신은 어떤 매개 변수가 구성되어 있지 않으므로, 위의 잘 작동합니다. 그러나 적어도 하나의 매개 변수를 제공 할 수 있으며 아마도 컨트롤을 더 재사용 할 수 있도록해야합니다.

예를 들어, 메소드 호출에 하드 코드 된 값 75이 있습니다. Ektron 폴더, 분류 또는 컬렉션을 가리키고 있다고 가정합니다. 그럼에도 불구하고 그것은 일부 컨테이너 ID입니다. 이 컨트롤을 다른 소스 인 데이터 (여러 컨테이너 ID)가있는 여러 위치에서 사용할 수 있습니다. 이것을 설정 한 방법은 매번 그 값을 업데이트하기 위해 새로운 컨트롤을 만들어야합니다.

using Ektron.Custom.SmartForms; 
using System; 
using System.Linq; 

public partial class Source_Controls_Alumni_Gallery : System.Web.UI.UserControl 
{ 

    // Added Property 
    private long _containerId = 0; 
    public long ContainerID { 
     get { return _containerId; } 
     set { _containerId = value; } 
    } 
    ///////// 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     // Added inverted conditional to escape method 
     // if the _containerId is invalid. 
     if(_containerId <= 0) return; 
     /////////// 

     var pressPhotoManager = new PressPhotoManager(); 

     // Whichever folder Id... 
     var photos = pressPhotoManager.GetList(_containerId); 

     if (photos != null && photos.Any()) 
     { 
      uxPhotoGallery.DataSource = photos; 
      uxPhotoGallery.DataBind(); 
     } 
    } 
} 

는 그런 다음 컨테이너 ID를 지정할 수 있습니다 언제 어디서나 당신은 컨트롤을 배치 :

그래서 코드 숨김 다음과 같습니다 있도록 우리는 당신의 통제에 공용 속성을 추가합니다.

<sp:Spinner runat="server" ID="uxAlumniSpinner" ContainerID="75" /> 

는 최종의 템플릿 마크 업을 만들기 : 지금처럼

<%@ Register Src="~/Source/Controls/JoinUs/StaffAndParalegals/SPContactDetails.ascx" TagPrefix="uc1" TagName="SPContactDetails" %> 
<%@ Register Src="~/Source/Controls/Shared/TextImageAssetBlockModules.ascx" TagPrefix="uc1" TagName="TextImageAssetBlockModules" %> 
<%@ Register Src="~/Source/Controls/Shared/TextLinkBlockControl.ascx" TagPrefix="uc1" TagName="TextLinkBlockControl" %> 
<%@ Register TagPrefix="sp" TagName="Spinner" Src="~/Source/Controls/Alumni/Gallery.ascx" %> 


<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
    <uc1:SubHeader runat="server" ID="SubHeader" /> 
    <div class="container non-responsive"> 
     <div class="row"> 
      <div class="col-sm-8 alpha"> 
       <uc1:PrimarySection runat="server" ID="PrimarySection" /> 
       <div class="primary"> 
        <div class="container non-responsive"> 
         <div class="row"> 
          <div class="col-sm-8 alpha"> 
           <div class="primary"> 
            <sp:Spinner runat="server" ID="uxAlumniSpinner" ContainerID="75" /> 
           </div> 
          </div> 
          <div class="col-sm-4 beta"> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
      <div class="col-sm-4 beta"> 
       <uc1:SPContactDetails runat="server" ID="SPContactDetails" /> 
       <uc1:SPFilters runat="server" ID="SPFilters" Heading="Staff and Paralegal Openings" Text="Select an office below to learn more about current opportunities" /> 
       <uc1:RelatedContentModules runat="server" ID="RelatedContentModules" /> 
       <uc1:TextLinkBlockControl runat="server" ID="TextLinkBlockControl" /> 
       <uc1:TextImageAssetBlockModules runat="server" ID="TextImageAssetBlockModules" /> 
      </div> 
     </div> 
    </div> 
</asp:Content> 
+0

할까요 뒤에 코드에서 여전히 75? 하지 말았어야 var photos = pressPhotoManager.GetList (ContainerID); ? – fred1234

+1

수정 됨. _containerId 또는 ContainerID는 Page_Load 메서드와 사용자 지정 코드의 다른 위치에서 사용할 수 있습니다. 그것에 대해 일관성을 유지하십시오.한 곳에서는 _containerId를 사용하고 다른 곳에서는 ContainerID를 사용하지 마십시오. ContainerID의 주요 목적은 배치 된 컨트롤에서 구성 할 수있는 공용 속성입니다. – egandalf