Với ASP.NET 2.0 bạn có thể kết hợp cả hai ngôn ngữ C# và VB.net để viết code trong một trang web. Điều này thật tuyệt khi làm việc với Web Forms nhưng việc kết hợp 2 ngôn ngữ trên để viết class đặt trong thư mục App_code lại không được (theo thiết lập mặc định). Để làm được điều đó chúng ta cần phải thực hiện vài thao tác config để ASP.NET có thể làm việc được. Bài viết này hướng dẫn bạn các bước giải quyết vấn đề trên.
Tạo Subfolder và class
Trước hết hãy tạo mới một web site trong visual studio 2005 và add thư mục App_code Click chuột phải lên website và click chọn "Add ASP.NET Folder" :
Hãy thêm vào thư mục App_code hai class với tên class1.cs và class2.vb. Như vậy class 1 viết bằng ngôn ngữ c# và class 2 viết bằng vb.net. Hãy viết class với nội dung như sau:
Class1.cs
- public class Class1
- {
- public static string HelloWorld()
- {
- return "Hello World from C#";
- }
- }
Class2.vb
- Public Class Class2
- Public Shared Function HelloWorld() As String
- Return "Hello World from VB.NET"
- End Function
- End Class
Cả hai class đều có phương thức HelloWorld và các phương thức này trả về 1 chuỗi. Bây giờ bạn thử compile xem sao, một thông báo lỗi sẽ xuất hiện:
Error 1 The files '/AppCodeDiffLang/App_Code/Class2.vb' and '/AppCodeDiffLang/
App_Code/Class1.cs' use a different language, which is not allowed
since they need to be compiled together.
Thông báo này nói rằng chúng ta không thể sử dụng các ngôn ngữ khác nhau trong thư mục App_code vì chúng được biên dịch chung với nhau.
May mắn là vẫn có một cách để giải quyết vấn đề này. Đầu tiên hãy tạo hai thư mục con trong App_code (tên gì cũng được) trong bài viết này mình sẽ tạo hai thư mục CsharpCode chưa class1.cs và VbCode chứa class2.vb. Tiếp theo hãy hiệu chỉnh một số thông tin trong web.config giống như sau:
- <compilation debug="true">
- <codeSubDirectories>
- <add directoryName="CsharpCode"></add>
- <add directoryName="VbCode"></add>
- </codeSubDirectories>
- </compilation>
Trong đó tag <codeSubDirectories> sẽ định nghĩa những thư mục chứa các class viết bằng ngôn ngữ khác nhau. Khi biên dịch các thư mục này sẽ được biên dịch riêng rẽ và sẽ không có lỗi xảy ra.
Kiểm tra
Tiếp đến, hãy tạo trang web trên đó chứa hai nút chọn RadioButtonList1, RadioButtonList2, một nút nhấn Button1 và một nhãn Label1.
Web form có hai lựa chọn, khi người dùng chọn C# và click submit chúng ta sẽ gọi phương thức được viết bằng C# và ngược lại..
- protected void Button1_Click(object sender, EventArgs e)
- {
- switch (RadioButtonList1.SelectedValue)
- {
- case "CS":
- Label1.Text = Class1.HelloWorld();
- break;
- case "VB":
- Label1.Text = Class2.HelloWorld();
- break;
- }
- }
Bạn có thể chạy kiểm tra và kết quả trả về bới các phương thức tương ứng được gọi từ các class viết bằng các mã C# và VB.NET.