PostBackUrl和NavigateUrl

来源:互联网 发布:淘宝店铺客服几点上班 编辑:程序博客网 时间:2024/05/16 17:14
一、实现机制不同
  用户单击控件时,HyperLink控件立即转向目标,表单不需回发postback到服务器端,而LinkButton需将表单发回给服务器,在服务器端处理页面跳转功能,将用户导航到目标URL。

二、使用方法不同
  HyperLink只需设置NavigateUrl就可以实现页面跳转, LinkButton控件实现页面跳转是在Click事件中使用Response.Redirect等方法实现的。
  用法上最大的區別是LinkButton有Click事件﹐而HyperLink沒有。

  其實說專業點﹕LinkButton支持回發﹐可以在鏈接到新頁面前﹐做一些其他處理﹐如檢驗輸入﹑重拼URL等。
  而HyperLink則更像一個超鏈接﹐不會回發﹐所以也就處理不了其他的事務。
  使用上﹐LinkButton的URL參數在PostBackUrl中指定﹐后者在NavigateUrl中指定。
  如果LinkButton不聲明Click事件﹐則通過返回到客戶端的代碼可以看到是超鏈接﹐不過鏈接中有JS代碼﹐是專門為回發而設。如果有PostBackUrl的情況下﹐聲明了Click事件也不會回發。如果要讓其產生回發﹐則不能在代碼中指定Url。
  而HyperLink完全就是一個鏈接。
  這兩個控件都是鏈接類型﹐URL參數是必要的。主要說在頁面設計代碼里的綁定方式吧。
  1)NavigateUrl='<%#"page.aspx?id="+Eval("id")%>' 這種方式就是拼接﹐因為URL是字符串﹐所有用几個加號就可以接上﹐方便﹐但可能不太安全。
  2)NavigateUrl= '<%#String.Format(page.aspx?id={0},Eval("id"))%> ' ,這種方式用標准的字符串格式化方法做﹐比較標准。是較好的風格。

三、优缺点比较
  HyperLink可以在运行时使用代码改变其属性,但是其本身不会触发任何事件,因此只能在其它事件中添加属性设置的代码。HyperLink可以显示图片,可以设置Target方式的属性,这些都是LinkButton不具备的。


四、选择
  如果在“到达”目标URL之前需要进行服务器端处理,则使用LinkButton控件;如果无需进行服务器端处理,则可以使用HyperLink控件。

五、实战

1)我在网页中用了大量的LinkButton,
       <asp:LinkButton ID="lbtnBookName" runat="server"
           CommandArgument='<%# Eval("BookID") %>' Font-Bold="True" ForeColor="#3399FF"
           Text='<%# cusString(Eval("BookName").ToString(),0,34) %>' ToolTip='<%# Eval("BookName") %>'
            CommandName="ShowBookDetails" oncommand="lbtnBookName_Command"
            CausesValidation="False" Width="120px"></asp:LinkButton>

  点击该控件时,反应很慢,无法忍受。由于在转向新功能页面时不需要做其他操作,也就是不需要和服务器打交道,所以换成了HyperLink,去掉了LinkButton在.cs文件中的事件处理,感觉快了一些。

2)NavigateUrl的拼接一开始不熟练,把NavigateUrl='<%#"page.aspx?id="+Eval("id")%>' 写成了NavigateUrl="page.aspx?id="+'<%#Eval("id")%>' ,老出错。
3)后来,发现可以把HyperLink换成普通的超链接,何必用服务器控件呢?浪费资源
          <a href='<%#"User/BookDetails.aspx?bookID="+ Eval("BookID") %>' target="_self"><%# cusString(Eval("BookName").ToString(),0,30) %> </a>
4)ImageButton和linkButton性质用法一样,也被我换成了普通的超链接,
       <a href='<%#"User/BookDetails.aspx?bookID="+ Eval("BookID") %>' target="_self">
               <asp:Image ID="Image2" Height="80px" Width="60px" ImageUrl='<%# Eval("BookPicture") %>' ToolTip='点击显示详情' AlternateText='<%# Eval("BookName") %>' runat="server" />  
        </a>

总结:LinkButton支持回发,就是说,会访问服务器端,能回传是通过属性OnClientClick实现的,但是如果设置了PostBackUrl的情况下,即使有OnClientClick也不会发生回传了!说明以PostBackUrl为优先!当有PostBackUrl时,LinkButton等同于HyperLink,区别在于LinkButton没有target属性,你可以在后台添加此属性,方法如下:

link.Attributes.Add("target", "框架name");
link.Attributes.Add("href", "url路径");

再说一点,<a>标签可以实现点击链接,打开页面,同时实现执行一个点击事件,如下:

< script type="text/javascript">

function test(){
alert("你好啊");
}

< /script>

< a href="路径" target="right" onclick="test();" >我点击一下</a>
0 0
原创粉丝点击