Tương tác giữa C# và JavaScript

Hôm nay tôi gặp một vấn đề về tương tác giữa C# và JavaScript, sau khi tìm hiểu được nhiều thông tin hữu ích, tôi xin ghi lại để tham khảo sau này.

Nhiều lập trình viên thường muốn gọi hàm từ phía máy chủ (C#) để thực thi trên phía máy khách (JavaScript). Sau nghiên cứu, tôi đã tìm ra một số phương pháp thực hiện.

1. Sử dụng phương thức Response.Write để chèn mã script

Ví dụ, khi người dùng nhấp vào nút, sau khi thao tác với cơ sở dữ liệu, bạn có thể hiển thị thông báo hoàn thành bằng cách thêm:

Response.Write("<script type='text/javascript'>alert('Hoàn thành!');</script>");

Phương pháp này có hạn chế là không thể gọi hàm tùy chỉnh từ file script, chỉ có thể gọi các hàm tích hợp. Để gọi hàm tùy chỉnh, bạn phải định nghĩa nó trong Response.Write:

Response.Write("<script type='text/javascript'>function hamCuaToi(){...}</script>");
  1. Sử dụng lớp ClientScript để thêm script động

Cách sử dụng như sau: tại vị trí bạn muốn gọi hàm JavaScript, thêm đoạn code sau (đảm bảo hàm đã được định nghĩa trong file script):

ClientScript.RegisterStartupScript(ClientScript.GetType(), "scriptCuaToi", "<script>hamCuaToi();</script>");

Phương pháp này tiện lợi hơn Response.Write vì có thể gọi trực tiếp hàm tùy chỉnh từ file script.

  1. Thêm thuộc tính Attributes cho điều khiển thông thường

Với nút thông thường:

Nut1.Attributes.Add("onclick","hamCuaToi();");

Cách này chỉ hiệu quả khi được thêm trong sự kiện Onload hoặc quá trình khởi tạo tương tự. Hơn nữa, nó thực thi hàm script trước, không thể thay đổi thứ tự thực thi.

Lưu ý: Trong tất cả các phương pháp trên, mã phía máy chủ không được chứa các chuyển trang như Redirect, mà cần đặt mã chuyển trang trong script.

Các câu hỏi thường gặp:

  1. Làm thế nào để JavaScript truy cập hàm C#?

  2. Làm thế nào để JavaScript truy cập biến C#?

  3. Làm thế nào để C# truy cập biến JavaScript?

  4. Làm thế nào để C# truy cập hàm JavaScript?

Câu trả lời cho câu hỏi 1:

Thực thi hàm C# từ JavaScript:

Phương pháp 1:
1. Đầu tiên, tạo một nút, và viết nội dung cần gọi hoặc xử lý vào sự kiện button_click;


2. Viết một hàm js ở phía giao diện, nội dung là document.getElementById("btn1").click();


3. Gọi hàm js từ phía giao diện hoặc máy chủ, kích hoạt sự kiện click, tương đương với việc gọi hàm c# phía máy chủ;

Phương pháp 2:

//1. Khai báo hàm là public


//Máy chủ (có thể đổi public thành protected)

 

public string hamTraVe()


{


return("Giá trị trả về");


}
  1. Trong HTML, sử dụng <%=hamTraVe()% > để gọi

Script phía giao diện

<script language="javascript">


var bien = " <%=hamTraVe()% >";

alert(bien);


</script >

Phương pháp 3:

<script language="javascript" > 
<!--


function thucHienPostBack(dichDen, thamSo) 
{ 
var formHienTai = document.Form1;
//Chỉ form có runat=server


formHienTai.__EVENTTARGET.value = dichTen;


formHienTai.__EVENTARGUMENT.value = thamSo;


formHienTai.submit();

 

}

-- >

</script >


<input id="NutKichHoat" type="button" name="NutKichHoat" value="Nhấn vào đây" >

Phương pháp 4:

<script language="javascript" >


function XuLyNutNhan()

{

if (event.keyCode == 13)

{

event.cancelBubble = true;

event.returnValue = false;

document.all.TenHam.value="Tên hàm bạn muốn gọi";


document.form[0].submit();


}


}


</script >


<INPUT id="nhapLieu" type="text" >


<input type="hidden" name="TenHam" > 〈!--Dùng để lưu tên hàm cần gọi--〉

Trong tệp .CS có:

public Trang_OnLoad()

{

if (!Trang.IsPost())


{

string tenHamDuocGoi=Request.Form["TenHam"]!=null?Request.Form["TenHam"]:"";


//Dựa vào giá trị truyền về để quyết định gọi hàm nào


switch(tenHamDuocGoi)

{


case "nhap()":


nhap() ; //Gọi hàm này


break;


case "Khac:"


//Gọi hàm khác

break;

default:

//Gọi hàm mặc định

break;

}

}
}


public void nhap()

{

//...Ví dụ: tính toán giá trị
}

Câu trả lời cho câu hỏi 2: Làm thế nào để JavaScript truy cập biến C#?

Phương pháp 1:

//1. Truy cập qua trường ẩn trên trang
<input id="truongAn" type="hidden" runat="server" >

Phương pháp 2:

//1. Nếu phía máy chủ đã định nghĩa PUBLIC STRING N; JavaScript tham chiếu biến đó với định dạng:
' <%=n% > ' hoặc "+ <%=n% >+"

Phương pháp 3:

//1. Hoặc bạn có thể đăng ký một đoạn script trên trang sau khi gán giá trị biến ở phía máy chủ

" <script language= 'javascript ' >var tam=" + bienTam + " </script >"


// bienTam là biến phía máy chủ, sau đó JavaScript có thể truy cập trực tiếp biến tam.

Câu trả lời cho câu hỏi 3: Làm thế nào để C# truy cập biến JavaScript?

Phương pháp 1:

1. Sử dụng điều khiển văn bản tĩnh hoặc trường ẩn ở phía giao diện, ghi giá trị biến JavaScript vào đó;

2. Phía máy chủ dùng Request["id"] để lấy giá trị;

Phương pháp 2:

Có thể sử dụng cookie hoặc session

Câu trả lời cho câu hỏi 4: Làm thế nào để C# truy cập hàm JavaScript?

Phương pháp 1:

//1. Sử dụng ScriptManager để đăng ký script
ScriptManager.RegisterStartupScript(this, this.GetType(), "hamJS", "hamCuaToi();", true);

Phương pháp 2:

//1. Thực thi JavaScript từ code-behind bằng cách chèn thẻ script
Literal1.Text = "<script type='text/javascript'>hamCuaToi();</script>";

Thẻ: C# JavaScript asp.net tương tác máy chủ-khách hàng lập trình web

Đăng vào ngày 8 tháng 7 lúc 01:45