2013-03-07 2 views
0

설문 조사 페이지가 있습니다. 여기서 양식로드 이벤트에 라디오 버튼이 삽입됩니다. 포스트 백 (postback) 후에 버튼을 클릭하여 결과를 보내면 체크 된 상태와 함께 라디오 버튼이 계속 표시됩니다. 그러나 코드 뒤에 코드에서 코드 중 하나가 검사되었는지 (FindControl (id)에 의해) 확인되면 페이지가 충돌하는지 확인하려고 시도합니다. 나는 디버그를 할 수 없다. 그래서 나는 어떤 오류인지 모른다.코드 백스가 포스트 백 이후에 라디오 버튼을 찾지 못합니다.


<%@ Control language="vb" AutoEventWireup="false" Explicit="True" Inherits="DotNetNuke.UI.Skins.Skin" %> 
<%@ Register TagPrefix="dnn" TagName="USER" Src="~/Admin/Skins/User.ascx" %> 
<style> 
body {background-image:none; background-color:transparent;} 
</style> 
<div style="float:left; width:420px; height:335px;" id="divPerguntas" enableviewstate="true" runat="server"></div> 
<div style="float:left; width:420px; height:75px;"><asp:ImageButton ImageUrl="/Portals/_default/Skins/AdWin/img/Enviar.png" id="imgEnviar" runat="server" style="cursor:pointer;" /></div> 

<div id="ContentPane" runat="server"></div> 

<script runat="server"> 
    Protected Sub EnviarClick() Handles imgEnviar.Click 

     Dim conexao As SqlConnection 
     Dim comando As SqlCommand 
     Dim myReader As SqlDataReader 
     Dim sql As String 

     sql = "SELECT S.SurveyID, SO.SurveyOptionID FROM AdWin_Demo.dbo.Surveys S INNER JOIN AdWin_Demo.dbo.SurveyOptions SO ON S.SurveyID = SO.SurveyID WHERE S.VideoId = " + Request.QueryString("id") + " ORDER BY S.ViewOrder, SO.ViewOrder" 
     conexao = New SqlConnection("#CONNECTIONSTRING#") 
     conexao.Open() 
     comando = New SqlCommand(sql, conexao) 

     myReader = comando.ExecuteReader 

     If myReader.HasRows Then 
      Dim dt As New DataTable 
      dt.Load(myReader) 
      Dim SurveyID As Integer = 0 
      Dim FirstQuestion As Boolean = True 
      Dim checkedGroup As Boolean = False 
      Dim insertList As New DataTable 
      Dim ColumnIDSurveyOption As New DataColumn("c", GetType(Integer)) 
      insertList.Columns.Add(ColumnIDSurveyOption) 
      Dim row As DataRow 


      For Each dr As DataRow In dt.Rows 
       If FirstQuestion Then 
        SurveyID = dr("SurveyID") 
        FirstQuestion = False 
       End If 
       If SurveyID <> dr("SurveyID") Then 
        SurveyID = dr("SurveyID") 
        checkedGroup = False 
       End If 
       If SurveyID = dr("SurveyID") And checkedGroup = False Then 
         Dim radiobuttonToCheck As RadioButton = FindControl(dr("SurveyOptionID").ToString()) 
         If radiobuttonToCheck.Checked Then 
         checkedGroup = True 
         row = insertList.NewRow() 
         row("insertList") = dr("SurveyOptionID") 
         insertList.Rows.Add(row) 
         End If 
       End If 
      Next 

      If checkedGroup = True Then 
       Dim dnnUserCtrl As New DotNetNuke.Entities.Users.UserController 
       For Each dr As DataRow In insertList.Rows 
        sql = "INSERT INTO AdWin_Demo.dbo.Adwin_RespostasDadas (IDUser, SurveyOptionID) SELECT " & dnnUserCtrl.GetCurrentUserInfo.UserID & ", " & dr("SurveyOptionID").ToString() 
        comando = New SqlCommand(sql, conexao) 
        myReader = comando.ExecuteReader 
       Next 
      Else 
       Response.Write("Nao respondeste a tudo") 
      End If 
     End If 

     myReader.Close() 
     conexao.Close() 


    End Sub 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
     Me.EnableViewState = True 

     'If Not Page.IsPostBack Then 


     Dim conexao As SqlConnection 
     Dim comando As SqlCommand 
     Dim myReader As SqlDataReader 
     Dim sql As String 

     sql = "SELECT S.SurveyID, S.Question, SO.OptionName, SO.SurveyOptionID FROM AdWin_Demo.dbo.Surveys S INNER JOIN AdWin_Demo.dbo.SurveyOptions SO ON S.SurveyID = SO.SurveyID WHERE S.VideoId = " + Request.QueryString("id") + " ORDER BY S.ViewOrder, S.SurveyID, SO.ViewOrder" 
     conexao = New SqlConnection("#CONNECTIONSTRING#") 
     conexao.Open() 
     comando = New SqlCommand(sql, conexao) 

     myReader = comando.ExecuteReader 


     If myReader.HasRows Then 
      Dim dt As New DataTable 
      dt.Load(myReader) 
      Dim SurveyID As Integer = 0 
      Dim FirstQuestion As Boolean = True 
      Dim ActualDiv As System.Web.UI.HtmlControls.HtmlGenericControl 

      For Each dr As DataRow In dt.Rows 
       If SurveyID = dr("SurveyID") Then 

        Dim rb As New RadioButton 
        rb.GroupName = "Group" & SurveyID.ToString() 
        rb.ID = dr("SurveyOptionID").ToString() 
        rb.Text = dr("OptionName").ToString() 
        rb.EnableViewState = True 
        ActualDiv.Controls.Add(rb) 
        ActualDiv.Controls.Add(New LiteralControl("<br/>")) 

       Else 
        SurveyID = dr("SurveyID") 

        If FirstQuestion = False Then 
         Dim hr2 As New HtmlGenericControl("hr") 
         divPerguntas.Controls.Add(hr2) 
        End If 

        Dim div As New System.Web.UI.HtmlControls.HtmlGenericControl("DIV") 
        div.Style.Add("float", "left") 
        div.Style.Add("width", "400px") 
        div.Style.Add("color", "#777") 
        div.Style.Add("font-size", "11px") 
        div.Style.Add("line-height", "15px") 
        divPerguntas.Controls.Add(div) 
        ActualDiv = div 

        ActualDiv.InnerText = dr("Question").ToString() 
        ActualDiv.Controls.Add(New LiteralControl("<br/>")) 

        Dim rb As New RadioButton 
        rb.GroupName = "Group" & SurveyID.ToString() 
        rb.ID = dr("SurveyOptionID").ToString() 
        rb.Text = dr("OptionName").ToString() 
        rb.EnableViewState = True 
        ActualDiv.Controls.Add(rb) 
        ActualDiv.Controls.Add(New LiteralControl("<br/>")) 

        FirstQuestion = False 
       End If 
      Next 
      Dim hr As New HtmlGenericControl("hr") 
      divPerguntas.Controls.Add(hr) 
     End If 

     myReader.Close() 
     conexao.Close() 

    End Sub 
</script> 
+1

당신은 "나는 디버깅을 할 수 없다"무엇을 의미합니까? – codingbiz

+0

내가 언급하는 것을 잊지, 이것은 ascx 파일, dotnetnuke 피부입니다. 나는 디버그하는 법을 모른다. – Hahn86

+0

라디오를 dinamically하게 만들 수있는 다른 방법이 있다면 라디오의 모든 그룹에 선택된 라디오가 있는지 확인하고 그 라디오의 ID를 코드 뒤쪽으로 보낸다. 내가 DB에 정보를 저장할 수 있다고, 나는 당신에게 감사 할 것이다. – Hahn86

답변

0
Dim radiobuttonToCheck As RadioButton = FindControl(dr("SurveyOptionID").ToString()) 

->

Dim radiobuttonToCheck As RadioButton = Me.FindControl(dr("SurveyOptionID").ToString()) 
0

봅니다 PreInit 이벤트 페이지에 컨트롤을 추가하고 정확하게 데이터를 액세스 할 수 있는지 확인합니다. 자세한 내용은 여기 http://msdn.microsoft.com/en-us/library/ms178472.aspx

+0

나는 이해하지 못한다. 나는 언급하는 것을 잊는다, 이것은 ascx 파일, dotnetnuke 피부 다. PreInit 이벤트는 어떻게해야합니까? Visual Studio에서 'PreInit'에 '로드'를 적용 할 때 존재하지 않는다고 말합니다. – Hahn86

+0

Ok UC에 미리 이벤트가 없으므로 Init 이벤트를 시도해 볼 수 있습니까? – Chandermani

+0

init 이벤트를 사용하면 포스트 백 이후에 라디오가 사라집니다. – Hahn86