2014-12-02 2 views
1

이 글은 정말 나를 괴롭 히고 있습니다. 나는 대부분의 해결 방법을 읽고 시도했지만 여전히 포스트로 돌아갑니다 !!GridView의 ASP.NET LinkButton이 전체 포스트 백을 야기 함

모든 마크 업은 코드 숨김에서 동적으로 생성되어 init 이벤트의 마스터 페이지에 포함 된 페이지에 삽입됩니다.

일련의 중첩 탭이 있으며, 대부분의 탭 내용은 GridView의 데이터입니다. 각 Gridview는 자신의 업데이트 패널에 설정되어 있습니다. 모든 시간의 GridView에서의 LinkButton는 탭 전체 포스트 백을 발생하지 않는의 GridView의 외부와 UpdatePanel에 (모든 버튼을 다시 일으키는 전체 다시 게시가 클릭.

LinkButtons이

처럼 생성된다 ToolKitScriptManager

Private Sub AssessmentsMain_RowDataBound(sender As Object, e As GridViewRowEventArgs) 
    Try 
     If e.Row.RowType = DataControlRowType.DataRow Then 
      Dim vID As Integer = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "ID")) 
      Dim LB As LinkButton = CType(e.Row.Cells(4).Controls(0), LinkButton) 
      LB.ID = "AssMain_" & vID 
      AjaxControlToolkit.ToolkitScriptManager.GetCurrent(Me).RegisterAsyncPostBackControl(LB) 
     End If 
    Catch ex As Exception 
     Dim vError As New SendError 
     vError.MailError("840", PageName, ex) 
     ShowError() 
    End Try 
End Sub 

하나의 행에 대한 상기 생성 된 마크 업 등록

Dim Select_Field As New CommandField 
     With Select_Field 
      .HeaderText = "View Transactions" 
      .SelectText = "View Transactions" 
      .ShowSelectButton = True 
     End With 
     GV.Columns.Add(Select_Field) 

<tr class="GridView" style="color:#333333;background-color:#F7F6F3;"> 
<td>10</td> 
<td>Adam White</td> 
<td>4224 Res Road</td> 
<td align="right">$6,850.65</td> 
<td> 
<a id="ctl00_ContentPlaceHolder1_AssessmentsMainGV_ctl02_AssMain_10" href="javascript:__doPostBack(&#39;ctl00$ContentPlaceHolder1$AssessmentsMainGV&#39;,&#39;Select$0&#39;)" style="color:#333333;">View Transactions</a> 
012,351,641 같다

의 GridView 클래스

Public Class HAS_Gridview 
    Inherits GridView 
    Protected Overrides Sub OnInit(ByVal e As System.EventArgs) 
     MyBase.OnInit(e) 
     CellPadding = 4 
     GridLines = WebControls.GridLines.None 
     ForeColor = Drawing.ColorTranslator.FromHtml("#333333") 
     ClientIDMode = UI.ClientIDMode.AutoID 
     With MyBase.FooterStyle 
      .BackColor = Drawing.ColorTranslator.FromHtml("#E2DED6") 
      .Font.Bold = True 
      .ForeColor = Color.White 
     End With 
     RowStyle.BackColor = Drawing.ColorTranslator.FromHtml("#F7F6F3") 
     RowStyle.ForeColor = Drawing.ColorTranslator.FromHtml("#333333") 
     PagerStyle.HorizontalAlign = WebControls.HorizontalAlign.Center 
     PagerStyle.ForeColor = Color.Black 
     PagerStyle.BackColor = Drawing.ColorTranslator.FromHtml("#E2DED6") 
     With MyBase.SelectedRowStyle 
      .BackColor = Drawing.ColorTranslator.FromHtml("#E2DED6") 
      .Font.Bold = True 
      .ForeColor = Drawing.ColorTranslator.FromHtml("#333333") 
     End With 
     With MyBase.HeaderStyle 
      .BackColor = Drawing.ColorTranslator.FromHtml("#E2DED6") 
      .Font.Bold = True 
      .ForeColor = Color.Black 
      .CssClass = "GridView" 
     End With 
     EditRowStyle.BackColor = Drawing.ColorTranslator.FromHtml("#999999") 
     With MyBase.AlternatingRowStyle 
      .BackColor = Color.White 
      .ForeColor = Drawing.ColorTranslator.FromHtml("#284775") 
      .CssClass = "GridView" 
     End With 
     With MyBase.RowStyle 
      .CssClass = "GridView" 
     End With 
    End Sub 

End Class 

답변

0

나는 일이를 얻을 수있는 유일한 방법은

그것은 숨겨진 필드에 ID를 게시 할 수 있도록이 자바 스크립트를 추가하는 LinkButton 템플릿

Public Class LinkButtonTemplate 
    Implements ITemplate 
    Private m_ColumnName As String 
    Event LinkButtonItem_Clicked(sender As LinkButton, e As EventArgs) 
    Public Property ColumnName() As String 
     Get 
      Return m_ColumnName 
     End Get 
     Set(ByVal value As String) 
      m_ColumnName = value 
     End Set 
    End Property 
    Public Sub New() 
    End Sub 
    Public Sub New(ByVal ColumnName As String) 
     Me.ColumnName = ColumnName 
    End Sub 
    Public Sub InstantiateIn(container As Control) Implements ITemplate.InstantiateIn 
     Dim LB As New LinkButton() 
     With LB 
      .ID = "LB_" & ColumnName 
      .Text = ColumnName 
      .OnClientClick = "LinkButtonClick(this);" 
     End With 
     container.Controls.Add(LB) 
    End Sub 
End Class 

에 대한 클래스를 작성했고 그래서 지금 우리가 모두 알고 (전송의 GridView와 SEL을 우리가 필요로하는 ID를 캡처하고하는 LinkButton ID에 추가 RowDataBound 이벤트에 숨겨진 버튼

Private Sub LoadLinkButtonClick() 
    Try 
     Dim SB As New StringBuilder 
     SB.Append("function LinkButtonClick(LinkButton){ ") 
     SB.Append("setTimeout(function() { ") 
     SB.Append("$get('" & GridViewLBClicked.ClientID & "').click(); ") 
     SB.Append(" }, 300); ") 
     SB.Append("var sendingID = LinkButton.id; ") 
     SB.Append("document.getElementById('" & HiddenField1.ClientID & "').value = sendingID; ") 
     SB.Append("} ") 
     ScriptManager.RegisterStartupScript(Me, Me.GetType(), "LoadLinkButton", SB.ToString, True) 
    Catch ex As Exception 
     Dim vError As New SendError 
     vError.MailError("1229", PageName, ex) 
    End Try 
End Sub 

을 클릭 숨겨진 버튼에서 반사 된 행)

Private Sub AssessmentsMain_RowDataBound(sender As Object, e As GridViewRowEventArgs) 
    Try 
     If e.Row.RowType = DataControlRowType.DataRow Then 
      Dim vID As Integer = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "ID")) 
      Dim LB As LinkButton = CType(e.Row.Cells(4).Controls(0), LinkButton) 
      LB.ID = "AssMain_" & vID 
     End If 
    Catch ex As Exception 
     Dim vError As New SendError 
     vError.MailError("840", PageName, ex) 
     ShowError() 
    End Try 
End Sub 

우리가

Private Sub RaiseLinkButton_Click(sender As Object, e As EventArgs) 
    Try 
     Dim vFunction As New Functions 
     Dim vValue As String = HiddenField1.Value 
     Dim vSplit = vValue.Split("_") 
     Dim i As Integer = 0 
     For Count As Integer = 0 To vSplit.Length - 1 
      i += 1 
     Next 
     Dim DGName As String = vSplit(i - 2) 
     Select Case DGName 
      Case "AssMain" 
       Dim MV As MultiView = vFunction.FindControlRecursive(BodyMain, "AssessmentMultiView") 
       Dim GV As CustomControl.HAS_Gridview = vFunction.FindControlRecursive(BodyMain, "AssessmentDetailGV") 
       With GV 
        .DataSource = AssessmentsDetail_ReturnDataSet() 
        .DataBind() 
        .PageIndex = 0 
       End With 

       MV.ActiveViewIndex = 1 

       Dim vPanel As UpdatePanel = vFunction.FindControlRecursive(BodyMain, "AssessmentUpdatePanel") 
       vPanel.Update() 


     End Select 

    Catch ex As Exception 
     Dim vError As New SendError 
     vError.MailError("953", PageName, ex) 
     ShowError() 
    End Try 
End Sub 
0

는 트리거를 추가하는 프로그램 대신 AjaxControlToolkit에 등록 시도 유무 :

Dim trigger As New AsyncPostBackTrigger() 
trigger.ControlID = LB.ID 
trigger.EventName = "Click" 
MyUpdatePanel.Triggers.Add(trigger) 
+0

예뿐만 아니라 것을 -tried 비동기 포스트 백을해야 우리가 모든 데이터를 복구 할 수 있습니다 클릭 -이 컨트롤을 찾을 수 없습니다로 불어 로드 완료에서 실행되지 않는 한 - 그러면 작동하지 않습니다. – gchq

0

그것은 다시 게시가 생성 된 마크 업에 href="javascript:__doPostBack(&#39;ctl00$ContentPlaceHolder1$AssessmentsMainGV&#39;,&#39;Select$0&#39;)"에 의해 발생 같습니다 앵커 태그.

_doPostBack을 직접 정의하십시오.

post apost b을 이미 확인하지 않은 경우 두 가지 방법으로 해결할 수 있습니다. 결국

관련 문제