사용자 제어 C# .NET 내부의 공개 방법
-
03-07-2019 - |
문제
페이지 내에서 사용자 제어의 공개 메소드를 어떻게 호출 할 수 있습니까?
페이지의 oninit 내부에 컨트롤을 동적으로로드합니다. 어떤 이유로 든 메소드가 공개적이지만 메소드가 존재하지 않는다는 빌드 오류가 발생합니다. 사용자 컨트롤이 모든 번거 로움이 아니라고 생각하기 시작합니다.
해결책
당신은 말했습니다
Control fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
당신은 말해야합니다
FracTemplateCtrl fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
주목하십시오 fracTemplateCtrl is
a로 선언되었습니다 FracTemplateCtrl
, 따라서 Visual Studio는 그것이 있다는 것을 알고 있습니다 TestMethod()
. 그것이 선언 될 때 Control
, Visual Studio는이 가정을 만들 수 없습니다.
다른 팁
사용자 컨트롤을 올바른 유형으로 캐스팅하고 있습니까?
샘플 코드가 없으면 확실하게 말하기는 어렵지만 USERControl에 대한 언급을 특정 유형의 사용자 정의 컨트롤에 시전해야한다고 생각합니다. 예를 들어, USERCONTROL이 "PersonControl"유형 인 경우 코드가 다음과 같이 보입니다.
PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx");
ctl.DoCustomMethod();
수업이 UserControl에서 상속되는 경우, 다른 사람들이 말했듯이 액세스 할 때 올바르게 캐스팅하고 있는지 확인하십시오. 예를 들어:
public MyControl : UserControl
{
public void MyMethod(){...}
}
당신의 형태로 :
private MyControl mycontrol = new MyControl();
private void MainForm()
{
this.Controls.Add(mycontrol);
InitializeComponent();
}
private void DoStuff()
{
((MyControl)mycontrol).MyMethod();
}
Mike의 대답은 그것이 어떻게 수행되었는지이지만 Visual Studio는 Usercontrol 클래스를 감지하는 데 약간 원조 될 수 있으며 유형이 존재하지 않는다고 불평합니다. 그러한 상황에서 나는 a를 추가해야한다 <% @Reference %>
Web.config에서 참조 될 수 있지만 페이지의 태그를 인식하도록 강요합니다.