Gridview linkbutton postbackurl เปลี่ยนแปลงในเหตุการณ์การโหลดหน้า

ฉันมี gridview พร้อมปุ่มลิงค์ ปุ่มลิงค์ url ถูกกำหนดโดยใช้รหัสโดยการแทนที่คำสำคัญด้วยชื่อจากฐานข้อมูล

ทุกอย่างทำงานได้ดี ยกเว้นว่าเมื่อฉันคลิกปุ่มย้อนกลับในเบราว์เซอร์แล้วลองใช้ลิงก์อื่น ฉันได้รับข้อผิดพลาดนี้:

"ไม่อนุญาตให้ใช้กริยา HTTP POST เพื่อเข้าถึงเส้นทาง '/System.Web.UI.WebControls.Label'"

ด้านล่างคือรหัสของฉัน:

   protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Response.Cache.SetCacheability(HttpCacheability.NoCache);

            GridView1.DataSourceID = "SqlDataSource1";
            GridView1.DataBind();



            foreach (GridViewRow row in GridView1.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    var HyperLink = row.FindControl("LinkButton1") as LinkButton;
                    var RepID = row.FindControl("Label1") as Label;

                    if (RepID != null)
                    {
                        StringBuilder lnk = new StringBuilder("http://bhvwtwbis2/Ops/_layouts/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/Ops/GAPPBASE/Reports/kai.rdl&Source=http%3A%2F%2Fbhvwtwbis2%2FOps%2FGAPPBASE%2FForms%2FAllItems%2Easpx%3FRootFolder%3D%252FOps%252FGAPPBASE%252FReports%26FolderCTID%3D0x012000D833091DB062524DA7A0550847E4E075%26View%3D%7B8A039A42%2D111E%2D40C4%2D8489%2D0D7F32CEAF36%7D&DefaultItemOpen=1");
                        lnk.Replace("kai", RepID.Text + "x1");
                        HyperLink.PostBackUrl = lnk.ToString();
                    }
                }

            }

        }

    }


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="report_id" DataSourceID="SqlDataSource1" BackColor="White" 
        BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
        ForeColor="Black" GridLines="Horizontal">
        <Columns>

        <asp:TemplateField HeaderText="ID">
        <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%# Eval("report_name")%>'></asp:Label>

        </ItemTemplate>

                    <HeaderStyle HorizontalAlign="center" 
                        VerticalAlign="Middle" />
                    <ItemStyle CssClass="link3" HorizontalAlign="Left" />

        </asp:TemplateField>
                <asp:TemplateField HeaderText="Title">
        <ItemTemplate>
            <asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Eval("report_subject")%>'></asp:LinkButton>

        </ItemTemplate>

                    <HeaderStyle HorizontalAlign="center" 
                        VerticalAlign="Middle" />
                    <ItemStyle CssClass="link3" HorizontalAlign="Left" />

        </asp:TemplateField>

        </Columns>
        <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
        <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
        <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#F7F7F7" />
        <SortedAscendingHeaderStyle BackColor="#4B4B4B" />
        <SortedDescendingCellStyle BackColor="#E5E5E5" />
        <SortedDescendingHeaderStyle BackColor="#242121" />
    </asp:GridView>

person Ammar Ali    schedule 10.06.2013    source แหล่งที่มา
comment
คุณกำลังตั้งค่า URL postback ของไฮเปอร์ลิงก์เป็นสิ่งที่อยู่ในป้ายกำกับข้อความที่มี x1 ต่อท้ายใช่ไหม จะดีกว่าไหมถ้าใช้ asp:Repeater เพื่อสร้างปุ่มลิงก์ตามที่คุณต้องการตั้งแต่เริ่มต้น   -  person Mikey Mouse    schedule 10.06.2013
comment
นอกจากนี้คุณช่วยโพสต์คำจำกัดความสำหรับ GridView1 ของคุณได้ไหม   -  person Mikey Mouse    schedule 10.06.2013
comment
ผมใช้ gridview coz มีเพจโดยตรง (วิธีง่ายๆ)   -  person Ammar Ali    schedule 11.06.2013
comment
เพิ่มรหัส aspx ของ gridview ขอบคุณที่เสนอความช่วยเหลือของคุณ   -  person Ammar Ali    schedule 11.06.2013
comment
ฉันได้โพสต์วิธีแก้ปัญหาแล้ว หวังว่ามันจะได้ผล   -  person Mikey Mouse    schedule 11.06.2013


คำตอบ (1)


ฉันคิดว่าปัญหาอาจเป็นเพราะคุณกำลังทำการผูกที่ระยะ Page_Load ของวงจรชีวิตของเพจ ลองย้ายโค้ด foreach ของคุณไปที่ a

    protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {

                  var HyperLink = e.Row.FindControl("LinkButton1") as LinkButton;
                  //var RepID = row.FindControl("Label1") as Label;
                  //You should be able to access your field without referencing the label too
                  DataRow row = ((DataRowView)e.Row.DataItem).Row;
                  var myField = row.Field<string>("report_name");

                  if (RepID != null)
                  {
                      StringBuilder lnk = new StringBuilder("http://bhvwtwbis2/Ops/_layouts/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/Ops/GAPPBASE/Reports/kai.rdl&Source=http%3A%2F%2Fbhvwtwbis2%2FOps%2FGAPPBASE%2FForms%2FAllItems%2Easpx%3FRootFolder%3D%252FOps%252FGAPPBASE%252FReports%26FolderCTID%3D0x012000D833091DB062524DA7A0550847E4E075%26View%3D%7B8A039A42%2D111E%2D40C4%2D8489%2D0D7F32CEAF36%7D&DefaultItemOpen=1");
                    lnk.Replace("kai", myField  + "x1");
                    HyperLink.PostBackUrl = lnk.ToString();
                  }
          }

    }
person Mikey Mouse    schedule 11.06.2013