Xin lỗi vì nhận được chủ đề cũ này lên.
Tôi sẽ đi theo cách sau để bản địa hóa enum, vì nó có thể hiển thị các giá trị có ý nghĩa và được bản địa hóa cho người dùng, không chỉ mô tả, thông qua trường văn bản danh sách thả xuống trong ví dụ này.
Đầu tiên, tôi tạo một phương thức đơn giản gọi là OwToStringByCARM để lấy các chuỗi được bản địa hóa từ tệp tài nguyên toàn cầu, trong ví dụ này là BiBongNet.resx trong thư mục App_GlobalResource. Trong tệp tài nguyên này, đảm bảo bạn có tất cả các chuỗi giống như các giá trị của enum (reallyNice, SortOfNice, NotNice). Trong phương thức này, tôi truyền vào tham số: resourceClassName thường là tên của tệp tài nguyên.
Tiếp theo, tôi tạo một phương thức tĩnh để điền vào danh sách thả xuống với enum làm nguồn dữ liệu của nó, được gọi là OwFillDataWithEnum. Phương pháp này có thể được sử dụng với bất kỳ enum nào sau này.
Sau đó, trong trang có danh sách thả xuống có tên DropDownList1, tôi đã đặt trong Page_Load sau đây chỉ một dòng mã đơn giản để điền enum vào danh sách thả xuống.
BiBongNet.OwFillDataWithEnum<HowNice>(DropDownList1, "BiBongNet");
Đó là nó. Tôi nghĩ với một số phương pháp đơn giản như thế này, bạn có thể điền bất kỳ điều khiển danh sách nào với bất kỳ enum nào, không chỉ là các giá trị mô tả mà còn là văn bản được bản địa hóa để hiển thị. Bạn có thể thực hiện tất cả các phương thức này như các phương thức mở rộng để sử dụng tốt hơn.
Hy vọng điều này giúp đỡ. Chia sẻ để được chia sẻ!
Dưới đây là các phương pháp:
public class BiBongNet
{
enum HowNice
{
ReallyNice,
SortOfNice,
NotNice
}
/// <summary>
/// This method is for filling a listcontrol,
/// such as dropdownlist, listbox...
/// with an enum as the datasource.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="ctrl"></param>
/// <param name="resourceClassName"></param>
public static void OwFillDataWithEnum<T>(ListControl ctrl, string resourceClassName)
{
var owType = typeof(T);
var values = Enum.GetValues(owType);
for (var i = 0; i < values.Length; i++)
{
//Localize this for displaying listcontrol's text field.
var text = OwToStringByCulture(resourceClassName, Enum.Parse(owType, values.GetValue(i).ToString()).ToString());
//This is for listcontrol's value field
var key = (Enum.Parse(owType, values.GetValue(i).ToString()));
//add values of enum to listcontrol.
ctrl.Items.Add(new ListItem(text, key.ToString()));
}
}
/// <summary>
/// Get localized strings.
/// </summary>
/// <param name="resourceClassName"></param>
/// <param name="resourceKey"></param>
/// <returns></returns>
public static string OwToStringByCulture(string resourceClassName, string resourceKey)
{
return (string)HttpContext.GetGlobalResourceObject(resourceClassName, resourceKey);
}
}