none
GridView中的LinkButton 的PostBackUrl 点击两次才导航到指定页面?? RRS feed

  • 问题

  • 前台页面:       

     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BorderWidth="0px"
                GridLines="None" ShowHeader="False" Style="width: 100%; overflow: hidden;">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                                <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"><%# Eval("id") %></asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

    后台代码:   

       protected void LinkButton1_Click(object sender, EventArgs e)
        {
            LinkButton ib = sender as LinkButton; 
            GridViewRow row = ib.NamingContainer as GridViewRow;     
            int CurRow = row.RowIndex;
            LinkButton imb = (LinkButton)GridView1.Rows[CurRow].FindControl("LinkButton1");
            imb.PostBackUrl = "z.aspx"; 
        }

    问题:运行后点击任何一个LinkButton1一次都不进行导航,只有连续点击两次才能导航到指定页面...
     若是把imb.PostBackUrl = "z.aspx"; 换成  Response.Redirect("z.aspx");就可以一次到达了,思考了很长时间不知道为什么imb.PostBackUrl = "z.aspx";点击两次才能导航.......

    2010年4月21日 10:20

答案

  • PostBackUrl只是LikButton的属性它不是方法它不会执行操作,它在LinkButton发生Click事件时,系统自动从PostBackUrl属性读取Url并以此Url重定向,,所以执行重定向的是Click事件指向的方法。当然该语句是封装在LinkButton类内的我们看不到,估计是从Button类继承来的。现在就可是说明为什么你要连续点击两次才能导航到指定页面,当你第一次点击时LinkButton的PostBackUrl值是“/”所以重定向到原页面,但因为发生了Click事件所以会执行“imb.PostBackUrl = "z.aspx";  ”语句,此时PostBackUrl值是“z.aspx”,然后当你第二次点击时就会重定向到“z.aspx”。

    要解决此问题就要在GridView初始化数据时给LinkButton的PostBackUrl属性一个初始值。

    2010年4月21日 13:06
  • 在GridView的RowDataBound事件中加入:

    if(e.Row.RowType==DataControlRowType.DataRow)  
    ((LinkButton)e.Row.Cells[LinkButton的索引].FindControl(LinkButton的id)).PostBackUrl = 要跳转的页面;

    2010年4月22日 1:43
  • 你好,

    上面withoutwax 已经回答了你的这个问题,PostBackUrl只是个属性,不是方法,它不会去执行。

    所以只有你设置好后,当你第二次点击它时,它才会转到你要去的页面。

    你设置个“#”你想转到哪个页面呢。所以这时它不会转向,等你在代码里设置好PostBackUrl后再点击的时候才会。

    杨琦的方法可以解决你的问题,你参考下吧。
    Microsoft Online Community Support
    2010年4月23日 3:01
  • <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" PostBackUrl ="~/z.aspx" ><%# Eval("id") %></asp:LinkButton>
    2010年4月23日 6:24
  • 你点击第一次,只是给没有赋值的PostBackUrl给添加上了地址,你第二次点击的时候才是遵循你赋值的地址去打开访问链接。

     

    杨琦 给出的方法,就是让你节省了第一次打开需要赋值的步骤。

    2010年4月24日 11:32

全部回复

  • PostBackUrl只是LikButton的属性它不是方法它不会执行操作,它在LinkButton发生Click事件时,系统自动从PostBackUrl属性读取Url并以此Url重定向,,所以执行重定向的是Click事件指向的方法。当然该语句是封装在LinkButton类内的我们看不到,估计是从Button类继承来的。现在就可是说明为什么你要连续点击两次才能导航到指定页面,当你第一次点击时LinkButton的PostBackUrl值是“/”所以重定向到原页面,但因为发生了Click事件所以会执行“imb.PostBackUrl = "z.aspx";  ”语句,此时PostBackUrl值是“z.aspx”,然后当你第二次点击时就会重定向到“z.aspx”。

    要解决此问题就要在GridView初始化数据时给LinkButton的PostBackUrl属性一个初始值。

    2010年4月21日 13:06
  • <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BorderWidth="0px"
                GridLines="None" ShowHeader="False" Style="width: 100%; overflow: hidden;">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                                <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" PostBackUrl ="#" ><%# Eval("id") %></asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

    我在前台加上了 PostBackUrl ="#" 也还是不行啊......

    2010年4月22日 1:33
  • 在GridView的RowDataBound事件中加入:

    if(e.Row.RowType==DataControlRowType.DataRow)  
    ((LinkButton)e.Row.Cells[LinkButton的索引].FindControl(LinkButton的id)).PostBackUrl = 要跳转的页面;

    2010年4月22日 1:43
  • 我想问的是我那种方法为什么要点击两次才能导航.....到底问题出在哪里
    2010年4月23日 0:18
  • 你好,

    上面withoutwax 已经回答了你的这个问题,PostBackUrl只是个属性,不是方法,它不会去执行。

    所以只有你设置好后,当你第二次点击它时,它才会转到你要去的页面。

    你设置个“#”你想转到哪个页面呢。所以这时它不会转向,等你在代码里设置好PostBackUrl后再点击的时候才会。

    杨琦的方法可以解决你的问题,你参考下吧。
    Microsoft Online Community Support
    2010年4月23日 3:01
  • <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" PostBackUrl ="~/z.aspx" ><%# Eval("id") %></asp:LinkButton>
    2010年4月23日 6:24
  • 你们都没有理解我的意思,你们提供的方法我知道都能一次导航到指定页面....
    但我要问的是点击一次不进行导航的原因...PostBackUrl只是个属性,不是方法,也会执行啊...
    2010年4月24日 1:54
  • 你点击第一次,只是给没有赋值的PostBackUrl给添加上了地址,你第二次点击的时候才是遵循你赋值的地址去打开访问链接。

     

    杨琦 给出的方法,就是让你节省了第一次打开需要赋值的步骤。

    2010年4月24日 11:32