2012-06-20 4 views
0

저는 ASPX 페이지 요소를 조작하는 많은 방법을 가지고 있으며,이 시점에서 이들을 자신의 정적 객체로 캡슐화하는 것이 좋습니다. 그러나 ASPX 페이지 외부의 양식 요소에 액세스 할 수없는 것 같습니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?클래스 내부의 ASPX 요소에 액세스하십시오.

+0

왜 정적 객체입니까? 진실로 국가가 없습니까? 또한 하위 클래스의 기능을 상속받을 수 있도록 기본 클래스 만 갖고 싶은 무언가입니까? 마지막으로, aspx 페이지 요소를 조작하는 경우 요소 및 캡슐화 된 기능을 사용하여 웹 사용자 정의 컨트롤을 만드는 것이 더 합리적입니까? 요컨대, 당신이 갖고있는 것과 당신이 원하는 것에 대한 실제 예를들 수 있습니까? – NotMe

+0

"ASPX 페이지 외부의 양식 요소에 액세스 할 수 없습니다."라는 의미를 모르겠습니다. FindControl을 사용하고 있는데 아무 것도 반환하지 않는다는 것을 의미합니까? 코드 샘플을 게시하여 수행중인 작업을 설명하고 오류를 좀 더 명확하게 설명하십시오. –

답변

0

페이지 개체를 매개 변수 중 하나로 클래스 메서드에 전달해야 클래스의 요소에 액세스 할 수 있습니다.

당신은 같은 클래스가있는 경우 예를 들어

: 당신이 정말로 기능을 캡슐화 할 경우

CMyDataClass oMyDataClass = new CMyDataClass(); 

if (oMyDataClass.CompareText(this)) { 
    Response.Write("Ok!"); 
} 
0

, 당신이 최고의 만들 것 같아요 :

public class CMyDataClass { 
    public bool CompareText(System.Web.UI.Page i_oPage) { 
     TextBox oTextBox = i_oPage.FindControl("TextBox1"); 
     return (oTextBox.Text == "My Data"); 
    } 
} 

당신은 페이지에서 다음과 같이 사용할 수 있습니다 관련 요소를 생성자에 전달하는 클래스입니다.

다른 페이지에서 재사용을하려는 경우 상속 한 기본 페이지를 만들 수 있습니다. 또 다른 옵션은 페이지에서 참조하는 마스터 페이지에서 작업을 수행하는 것입니다.

더 자세한 답변을 제공하려면보다 자세한 질문이 필요하다고 생각합니다.

1

당신은 클래스로 페이지 자체를 전달하는 아래의 예를 참조해야합니다

<form id="form1" runat="server"> 
<div> 
    <asp:TextBox ID="txtTest" runat="server" Text="Test" /> 
</div> 
</form> 

코드 숨김

ASPX 페이지를

protected void Page_Load(object sender, EventArgs e) 
    { 
     Process p = new Process(this); 
     string s = p.GetTextBoxValue(); 
    } 

클래스

public class Process 
    { 
     public Page thePage { get; set; } 

     public Process(Page page) 
     { 
      thePage = page; 
     } 

     public string GetTextBoxValue() 
     { 
      TextBox tb = (TextBox)thePage.FindControl("txtTest"); 
      return tb.Text; 
     } 

    } 

아마도 프로세스가 클래스에 가장 적합한 이름은 아니지만, 이것은 단지 데모입니다.

또한 Page 객체를 다른 클래스에 전달하면 해당 클래스가 Page 객체에 연결됩니다. Page 객체에 전적으로 의존하지 않으려는 클래스의 디자인을 재고하는 것이 좋습니다.

관련 문제