2013-10-09 3 views
1

FindControl 호출을 조사했지만 Public Shared Sub 문제는 언급하지 않았습니다. aspx 페이지를 사용하고 vb.net 코드 숨김. 마스터 페이지를 사용하고 있지 않습니다.FindControl가 공유 서브에서 작동하지 않습니다.

panContent라는 기본 Panel 객체를 참조하는 아래의 일반적인 Public Sub 메소드에서 이미이 페이지에서 FindControl을 사용하고 있습니다.

Dim rdobtn As RadioButton = DirectCast(panContent.FindControl("rbFarm"), RadioButton) 

그러나 공용 공유 하위 내에서 panContent 개체는 사용할 수 없습니다. "비공유 회원에 대한 참조는 객체 참조가 필요합니다."라는 오류 메시지가 나타납니다. Page.FindControl ("panContent") 및 Me.FindControl ("panContent")을 사용하여 Panel 객체를 만들고 동일한 오류가 발생했습니다. aspx 페이지는 body 태그, form 태그, scriptmanager 태그, upMain이라는 업데이트 패널, panContent라는 기본 패널 순으로 정렬됩니다.

공유 하위의 개체 속성을 변경할 수 있도록 컨트롤에서 개체를 만들려면 어떻게해야합니까? (공간 편집)

aspx 페이지

<%@ Page Language="VB" AutoEventWireup="false" Inherits="GM._Default" CodeBehind="Default.aspx.vb" %> 
<% Register Assembly="AjaxControlToolkit, Version, etc... %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>GMN</title> 
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js"></script> 
    <script type="text/javascript"> 
    function fnConfirmMsg() { 
     var ans = confirm("This will delete any saved bank information. Continue?"); 
     if (ans == true) { 
      $.ajax({ 
       type: "POST", 
       url: "Default.aspx/DraftContinue", 
       contentType: 'application/json; charset=utf-8', 
       data: '{}', 
       dataType: 'json', 
       success: function (result) { 
       } 
      }); 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" /> 
     <asp:UpdatePanel ID="upMain" runat="server" UpdateMode="conditional"> 
      <ContentTemplate> 
       ...other divs... 
       <div id="centercontent"> 
        <asp:Panel ID="panContent" runat="server"> 
         <table border="0"> 
          ...other <tr> with controls... 
          <tr> 
           <td> 
            <asp:DropDownList ID="ddlDraft" runat="server" AutoPostBack="true"> 
             <asp:ListItem Value="Y">Yes</asp:ListItem> 
             <asp:ListItem Value="N">No</asp:ListItem> 
            </asp:DropDownList> 
           </td> 
           <td> 
            <asp:RadioButton ID="rbFarm" runat="server" AutoPostBack="true" /> 
           </td> 
          </tr> 
          ...other <tr> with controls... 
         </table> 
        </asp:Panel> 
       </div> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </form> 
</body> 
</html> 

코드 숨김 (만 보여주는 관련 항목)

Protected Sub ddlDraft_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlDraft.SelectedIndexChanged 
    If ViewState("DraftYorN").Equals("Y") And ddlDraft.SelectedValue = "N" Then 
     ScriptManager.RegisterStartupScript(Me, Me.GetType(), "callConfirmMsg", "fnConfirmMsg();", True) 
    End If 
End Sub 

<System.Web.Services.WebMethod()> _ 
Public Shared Sub DraftContinue() 
    Dim ddlDraft As DropDownList = DirectCast(panContent.FindControl("dlDraftRenewMembership"), DropDownList) 
    Dim rbtnFarm as RadioButton = DirectCast(panContent.FindControl("rbFarm"), RadioButton) 
    If ddlDraft.SelectedValue = "N" then 
     rbtnFarm.Checked = True 
    End If 
End Sub 

그 오류를 주시는 panContent. 그래서 나는 그 컨테이너 upMain을 사용하여 panContent 객체를 만들 것이라고 생각했습니다. 같은 오류가 발생했습니다.

답변

1

동적으로 컨트롤을 만들고 있습니까? 당신이 있다면, PageInit 동안 그렇게해야 할 것입니다. 당신이 그것을 만들기 전에 그것을 "찾으려고"시도하고 있습니까?

더 많은 코드가 도움이 될 것입니다.

+0

동적으로 컨트롤을 만들지 않습니다. 메서드를 호출 할 때 변경하고 싶은 몇 가지 컨트롤이 있습니다. 모든 컨트롤은 aspx 페이지에서 만들어집니다. 하지만 공유 메서드를 사용하면 컨트롤을 호출 할 수 없으며 메서드에서 인스턴스를 만들어야합니다. 나는 보통 FindControl을 사용하여 그렇게한다. 하지만 사용하려고 시도하는 모든 컨테이너에서 게시물에 표시된 것과 동일한 오류 메시지를 표시하는 것 같습니다. 매우 바깥 쪽 컨테이너는 페이지 자체이지만 공유 메서드에서 전체 페이지의 인스턴스를 만드는 방법은 무엇입니까? –

+0

요청하신 관련 코드가 무엇이 었는지 추가되었습니다. –

+0

수행하고자하는 작업 : 드롭 다운 목록이 있는데 확인 상자를 열 때 필요하지만 예가 YES에서 NO로 변경 될 때만 필요합니다. 그래서 if ... then 이벤트 처리기에 자바 스크립트 함수를 호출 할 때 추가했습니다. javascript 함수는 확인 상자를 작성한 다음 확인 상자 응답을 사용하고 확인 응답이 YES 인 경우 ajax를 사용하여 코드 숨김 메소드를 호출하여 추가 변경을 수행합니다. –