<Cthuvien:nhap>
Controls thay thế: BSSButton
Mô tả
<Cthuvien:nhap> là control nút bấm (button) tiêu chuẩn của hệ thống (kế thừa từ System.Web.UI.HtmlControls.HtmlButton, render <button> html).
Control nổi bật với khả năng tự động nhận diện loại nút dựa trên keyword trong ID (nhap, moi, them, huy, xoa, tim, chon, sao, in, xem) để: tự động sinh biểu tượng icon phù hợp, tự động tạo phím tắt gạch chân chữ cái (accesskey), và tự động nhúng cơ chế chặn bấm liên tục (form_chay). Đối với các nút nhạy cảm (như ID chứa xoa hoặc moi), control tự động phát sinh hộp thoại yêu cầu xác nhận (confirm) trước khi thực thi.
Thuộc tính
Thuộc tính chung
| Tên | Kiểu | Mặc định | Có thể có | Mục đích | Thuộc tính mới | Ghi chú |
|---|---|---|---|---|---|---|
| id | string | nhap, moi, them, huy, xoa, tim, chon, sao, in, xem,... | Định danh của nút. Hệ thống sẽ bắt text ID này để xác định loại nút, icon, câu hỏi confirm. | |||
| Text | string | Nội dung văn bản hiển thị trên nút (nhập qua attribute Text) | ||||
| Width | string | Vd: 90px | Độ rộng của nút | |||
| anh | string | "K": ẩn ảnh Tên file ảnh mới | Tên file icon (đuôi png) hiển thị đằng trước Text trên nút | Nếu để trống, tự tìm ảnh tương ứng với ID |
Chức năng
| Tên | Kiểu | Mặc định | Có thể có | Mục đích | Thuộc tính mới | Ghi chú |
|---|---|---|---|---|---|---|
| hoi | int | 0 | Số ≥ 0 | Chỉ định vị trí (index) chữ cái trong Text để làm phím tắt (accesskey) và gạch chân. | Bắt đầu từ 0. | |
| giu | bool | false | true/false | Giữ cờ form_chay thành 1 trước khi chạy hàm JS để khóa, không cho người dùng bấm tiếp. | ||
| hoi_xoa | string | Chuỗi text | Nội dung câu hỏi xác nhận (confirm popup) sẽ hiển thị khi người dùng click nút. | Nếu bỏ trống: ID chứa xoa tự hỏi "Có xóa không?", ID chứa moi tự hỏi "Có xóa màn hình không?" | ||
| onclick | string | Hàm JS | Sự kiện click sẽ được bọc lại an toàn trên server trước khi render ra trình duyệt | Xem chi tiết trong phần Khởi tạo |
Khởi tạo
Control được khai báo trong file .aspx như một server control:
<Cthuvien:nhap ID="nhap" runat="server" Width="90px" Text="Nhập" OnClick="bhhd_xeG_P_NHn()" giu="true" />
Trước khi render ra client, function OnPreRender sẽ tự động xử lý và bọc (wrap) logic HTML/JS khá phức tạp:
Các attribute luôn được gắn:
| Attribute | Giá trị | Mô tả |
|---|---|---|
ten_goc | ID | Lưu ID gốc của control. |
anh | Giá trị thuộc tính anh | |
chu_goc | Text | Giữ nội dung gốc ban đầu chưa có thẻ HTML. |
hoi | Giá trị của hoi | |
style | width:... | Tự sinh nếu có Width. |
class | css_button | CSS mặc định. Trình duyệt IE cũ sẽ tự gán thêm onfocus / onblur đổi đuôi thành css_buttonf. |
accesskey | Ký tự từ vị trí hoi | Tự sinh để map với bàn phím. |
ham | Hàm onclick gốc | Lưu trữ mã JS gốc do người dùng khai báo ở server control. |
Cấu trúc HTML bên trong thẻ (InnerHtml):
Dựa vào loại nút (bóc tách từ ID, vd ID là nhap thì sẽ tự sinh file Anhap.png), hệ thống sinh ra một thẻ <img src="..."/>. Ký tự tại vị trí hoi của chuỗi Text sẽ bị cắt ra và bọc lại bằng <span style='text-decoration:underline'>...</span> để hiển thị phần gạch chân báo hiệu phím tắt.
Cấu trúc bọc sự kiện onclick:
Thay vì chạy ngay hàm gốc, sự kiện onclick sẽ được render thành một kịch bản theo thứ tự như sau:
if (!confirm('Nội dung hỏi?')) {form_chay=0;return false;}(Chỉ sinh ra nếu có cấu hìnhhoi_xoahoặc các ID đặc biệt như xóa, mới).if (form_Fb_CHAY()) {alert('Đang xử lý!'); return false;}(Kiểm tra xem hệ thống có đang bận submit gì không).form_chay=1;(Chỉ sinh ra nếu bật thuộc tínhgiu=true).- Chạy sự kiện
onclickgốc. form_chay=0; return false;(Reset trạng thái bận và ngăn submit form truyền thống của nút button).
Ví dụ
Khai báo thông thường (XML):
<tr>
<td>
<Cthuvien:nhap ID="nhap" runat="server" Width="90px" Text="Nhập" OnClick="bhhd_xeG_P_NHn()" giu="true"/>
</td>
<td>
<Cthuvien:nhap ID="moi" runat="server" Width="90px" Text="Mới" OnClick="bhhd_xeG_P_MOI()" />
</td>
<td>
<Cthuvien:nhap ID="copy" runat="server" Width="90px" Text="Copy" OnClick="bhhd_xeG_P_COPY()" />
</td>
<td>
<Cthuvien:nhap ID="xoa" runat="server" Width="90px" Text="Xóa" OnClick="bhhd_xeG_P_XOA()" />
</td>
<td>
<Cthuvien:nhap ID="in" runat="server" Width="90px" Text="In" OnClick="bhhd_P_IN('XE_CG_GCN');" />
</td>
</tr>
Mã HTML sinh ra (Client):
<!-- Nút Nhập (Bật thuộc tính giu=true) -->
<button
id="ctl00_ContentPlaceHolder1_nhap"
ten_goc="nhap"
width="90px"
chu_goc="Nhập"
class="css_button"
ham="bhhd_xeG_P_NHn()"
onclick="if (form_Fb_CHAY()) {alert('Đang xử lý!'); return false;}form_chay=1;bhhd_xeG_P_NHn(); form_chay=0; return false;"
style="width:90px"
text="Nhập"
accesskey="n"
hoi="0"
anh="">
<img alt="" src="/images/bitmaps/Anhap.png"> <span style="text-decoration:underline">N</span>hập
</button>
<!-- Nút Mới (Tự động sinh confirm hỏi xóa màn hình) -->
<button
id="ctl00_ContentPlaceHolder1_moi"
ten_goc="moi"
width="90px"
chu_goc="Mới"
class="css_button"
ham="bhhd_xeG_P_MOI()"
onclick="if (!confirm('Có xóa màn hình không?')) {form_chay=0;return false;}if (form_Fb_CHAY()) {alert('Đang xử lý!'); return false;}bhhd_xeG_P_MOI(); form_chay=0; return false;"
style="width:90px"
text="Mới"
accesskey="m"
hoi="0"
anh="">
<img alt="" src="/images/bitmaps/Amoi.png"> <span style="text-decoration:underline">M</span>ới
</button>
<!-- Nút Xóa (Tự động sinh confirm hỏi xóa dữ liệu) -->
<button
id="ctl00_ContentPlaceHolder1_xoa"
ten_goc="xoa"
width="90px"
chu_goc="Xóa"
class="css_button"
ham="bhhd_xeG_P_XOA()"
onclick="if (!confirm('Có xóa không?')) {form_chay=0;return false;}if (form_Fb_CHAY()) {alert('Đang xử lý!'); return false;}bhhd_xeG_P_XOA(); form_chay=0; return false;"
style="width:90px"
text="Xóa"
accesskey="x"
hoi="0"
anh="">
<img alt="" src="/images/bitmaps/Axoa.png"> <span style="text-decoration:underline">X</span>óa
</button>