Im sử dụng một đoạn mã từ một câu hỏi khác stackoverflow:Sử dụng [Hiển thị (Tên = "X")] với enum. HtmlHelper tùy chỉnh trong MVC3 ASP.Net
namespace MvcHtmlHelpers
{
public static class htmlHelpers
{
/// <summary>
/// Radio button for : Adapted to support enum labels from display attributes
/// </summary>
/// <typeparam name="TModel"></typeparam>
/// <typeparam name="TProperty"></typeparam>
/// <param name="htmlHelper"></param>
/// <param name="expression"></param>
/// <returns></returns>
public static MvcHtmlString RadioButtonForEnum<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression
)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var names = Enum.GetNames(metaData.ModelType);
var sb = new StringBuilder();
foreach (var name in names)
{
var id = string.Format(
"{0}_{1}_{2}",
htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix,
metaData.PropertyName,
name
);
var radio = htmlHelper.RadioButtonFor(expression, name, new { id = id }).ToHtmlString();
sb.AppendFormat(
"<label for=\"{0}\">{1}</label> {2}",
id,
HttpUtility.HtmlEncode(name),
radio
);
}
return MvcHtmlString.Create(sb.ToString());
}
}
}
Cùng đội hình hiện tại enum
tôi:
public enum Options
{
[Display(Name ="Yes")]
0,
[Display(Name = "No")]
1,
[Display(Name = "Other")]
2,
}
Nếu tôi sau đó sử dụng @html.RadioButtonForEnum(...)
Nó hiển thị enums của tôi với hộp thích hợp đã chọn không có vấn đề gì. Tuy nhiên, tôi muốn họ sử dụng giá trị nhãn [Display(Name = "<text>")]
để chúng có ý nghĩa hơn! - tức là không chỉ 0,1,2.
này hoạt động một điều trị, tiếc là tôi không nhận được giá trị được chọn tự động nữa mặc dù: '@ Html.RadioButtonForEnum (m => m.Options)' – JustAnotherDeveloper
@RawryLions, đúng vậy, tôi đã cập nhật câu trả lời của mình để sửa lỗi này. Nó sẽ hoạt động như mong đợi. –
công cụ tuyệt vời, cảm ơn sự giúp đỡ. Bây giờ tôi có thể sử dụng điều này làm cơ sở để tạo ra enum cho các phần tử biểu mẫu khác nữa :) – JustAnotherDeveloper