Câu trả lời muộn màng:
Tôi đã vật lộn với điều này kể từ khi tôi bắt đầu làm việc ở ASP. Đây là thứ tốt nhất tôi nghĩ ra:
Khái niệm: Tôi tạo một điều khiển tùy chỉnh có thẻ. Sau đó, trong nút tôi đặt một sự kiện onclick đặt document.location thành giá trị mong muốn bằng JavaScript.
Tôi đã gọi nút điều khiển, để tôi có thể dễ dàng nhận được nếu bị nhầm lẫn với LinkButton.
aspx:
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="ButtonLink.ascx.vb" Inherits="controls_ButtonLink" %>
<asp:Button runat="server" ID="button"/>
mã ẩn:
Partial Class controls_ButtonLink
Inherits System.Web.UI.UserControl
Dim _url As String
Dim _confirm As String
Public Property NavigateUrl As String
Get
Return _url
End Get
Set(value As String)
_url = value
BuildJs()
End Set
End Property
Public Property confirm As String
Get
Return _confirm
End Get
Set(value As String)
_confirm = value
BuildJs()
End Set
End Property
Public Property Text As String
Get
Return button.Text
End Get
Set(value As String)
button.Text = value
End Set
End Property
Public Property enabled As Boolean
Get
Return button.Enabled
End Get
Set(value As Boolean)
button.Enabled = value
End Set
End Property
Public Property CssClass As String
Get
Return button.CssClass
End Get
Set(value As String)
button.CssClass = value
End Set
End Property
Sub BuildJs()
' This is a little kludgey in that if the user gives a url and a confirm message, we'll build the onclick string twice.
' But it's not that big a deal.
If String.IsNullOrEmpty(_url) Then
button.OnClientClick = Nothing
ElseIf String.IsNullOrEmpty(_confirm) Then
button.OnClientClick = String.Format("document.location='{0}';return false;", ResolveClientUrl(_url))
Else
button.OnClientClick = String.Format("if (confirm('{0}')) {{document.location='{1}';}} return false;", _confirm, ResolveClientUrl(_url))
End If
End Sub
End Class
Ưu điểm của sơ đồ này: Nó trông giống như một điều khiển. Bạn viết một thẻ duy nhất cho nó, <ButtonLink id = "mybutton" navig Nghiệpl = "blahblah" />
Nút kết quả là nút HTML "thực" và do đó trông giống như một nút thực. Bạn không cần phải cố gắng mô phỏng giao diện của một nút bằng CSS và sau đó đấu tranh với các giao diện khác nhau trên các trình duyệt khác nhau.
Trong khi các khả năng bị hạn chế, bạn có thể dễ dàng mở rộng nó bằng cách thêm nhiều thuộc tính. Có vẻ như hầu hết các thuộc tính sẽ phải "chuyển qua" cho nút bên dưới, giống như tôi đã làm cho văn bản, được kích hoạt và cssclass.
Nếu bất cứ ai có một giải pháp đơn giản hơn, sạch hơn hoặc tốt hơn, tôi rất vui khi nghe nó. Đây là một nỗi đau, nhưng nó hoạt động.