ASP.NET MVC Core의 드롭다운 목록에 열거형 사용
레이저 보기에서 태그 도우미를 사용하여 ASP.NET MVC Core에 열거형 속성이 있는 드롭다운 목록을 만들려고 합니다.
모델은 다음과 같습니다.
public class PersonalMember : Member
{
[Required, Display(Name = "First Name")]
public string FirstName { get; set; }
[Required, Display(Name = "Last Name")]
public string LastName { get; set; }
[EnumDataType(typeof(Gender))]
public Gender GenderType { get; set; }
}
public enum Gender
{
Male = 1,
Female = 2
}
보기의 양식 일부는 다음과 같습니다.
<div class="form-group">
<label asp-for="GenderType" class="col-md-2 control-label"></label>
<div class="col-md-10">
<select asp-for="GenderType" asp-items="Html.GetEnumSelectList<GenderType>()">
<option selected="selected" value="">Please select</option>
</select>
<span asp-validation-for="GenderType" class="text-danger" />
</div>
</div>
제가 겪고 있는 문제는 그 이후에Html.GetEnumSelectList
,GenderType
인식되지 않고 오류로 표시됩니다.
이 문제를 해결하는 방법을 아는 사람이 있습니까?
제 생각에 당신은 실수로GenderType
대신에Gender
올바른 구문은 다음과 같습니다.
<select asp-for="GenderType" asp-items="Html.GetEnumSelectList<Gender>()">
<option selected="selected" value="">Please select</option>
</select>
GenderType
Enum 유형이 아닌 속성 이름입니다.GetEnumSelectList 메서드는 모델에 있는 속성의 이름이 아니라 Enumeration 유형을 지정해야 합니다.
사용해 보십시오.
Html.GetEnumSelectList<Gender>()
Razor 구문을 간단하게 사용할 수 있습니다.
@Html.DropDownList("StudentGender",
Html.GetEnumSelectList<Gender>(),
"Select Gender",new { @class = "form-control" })
아래는 저에게 효과가 있었던 것입니다.열거형 자체가 모델로 사용 중인 클래스의 범위에 따라 선언된 클래스이기 때문에 필요한 것입니다.
<select asp-for="Status" class="form-control" asp-items="@Html.GetEnumSelectList<Cart.CartStatus>()"></select>
참고용으로 내 모델(진행중인 작업) 아래에.
public class Cart
{
public int CartId { get; set; }
public List<Order> Orders { get; set; }
[Required]
public string UserId { get; set; }
public DateTime DeliveryDate { get; set; }
public CartStatus Status { get; set; }
public enum CartStatus
{
Open = 1,
Confirmed = 2,
Shipped = 3,
Received = 4
}
}
나도 같은 문제를 겪었어요, 해결책을 찾느라 머리를 데었어요!
이 문제를 해결하려면 다음과 같이 보기 위에 모델을 인스턴스화할 수 있습니다.
@using CRM.Model;
@사용자의 솔루션을 사용합니다.모델
네, 너무 이상하게 들리지만, 정말이에요, 효과가 있어요!제 게시물에서 제 답변을 보세요.
ASP.NET Core MVC에서 ENUM 태그 도우미 선택
DropDownList에서 선택한 옵션이 있을 때 케이스를 편집할 케이스가 하나 필요합니다.
ASP.NET 5(MVC 6)에서 열거형 사용 TagHelper 선택
public enum Gender {
[Display(Name = "Male")]Male = 1,
[Display(Name = "Female N")]Female = 2,
[Display(Name = "Other")]Other = 3
}
**사례 편집용:
@Html.DropDownListFor(m => m, Html.GetEnumSelectList(typeof(Gender)))
@Html.DropDownListFor(m => m.Gender, Html.GetEnumSelectList<Gender>()))
@Html.DropDownListFor(m => m.Gender, Html.GetEnumSelectList<Gender>(), "Select", new { @class = "form-control" })
**일반적인 경우:
<select asp-for="Gender" asp-items="@Html.GetEnumSelectList<Gender>()">
<option selected="selected" value="">Please select</option>
</select>
<select asp-for="Gender" asp-items="ViewBag.Genders"></select>
@Html.DropDownList("Gender", Html.GetEnumSelectList<Gender>(), "Select", new { @class = "form-control" })
asp-items="Html"에 젠더를 사용합니다.GetEnumSelectList 성별 유형 대신 성별 유형 - ()"을(를) 가져옵니다.
asp-items="Html"과 같이 입력합니다.Enum 선택 목록 가져오기 - 성별 - ()"
netcore 3에 열거형이 있는 Custom TagHelper DropDownList를 구현하는 방법입니다.
<radio-button-enum asp-for="@Model.Status" value="@Model.Status"></radio-button-enum>
/// <summary>
/// <see cref="ITagHelper"/> implementation targeting <enum-radio-button> elements with an <c>asp-for</c> attribute, <c>value</c> attribute.
/// </summary>
[HtmlTargetElement("radio-button-enum", Attributes = RadioButtonEnumForAttributeName)]
public class RadioButtonEnumTagHelper : TagHelper
{
private const string RadioButtonEnumForAttributeName = "asp-for";
private const string RadioButtonEnumValueAttributeName = "value";
/// <summary>
/// Creates a new <see cref="RadioButtonEnumTagHelper"/>.
/// </summary>
/// <param name="generator">The <see cref="IHtmlGenerator"/>.</param>
public RadioButtonEnumTagHelper(IHtmlGenerator generator)
{
Generator = generator;
}
/// <inheritdoc />
public override int Order => -1000;
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
protected IHtmlGenerator Generator { get; }
/// <summary>
/// An expression to be evaluated against the current model.
/// </summary>
[HtmlAttributeName(RadioButtonEnumForAttributeName)]
public ModelExpression For { get; set; }
[HtmlAttributeName(RadioButtonEnumValueAttributeName)]
public Enum Value { get; set; }
/// <inheritdoc />
/// <remarks>Does nothing if <see cref="For"/> is <c>null</c>.</remarks>
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (output == null)
{
throw new ArgumentNullException(nameof(output));
}
var childContent = await output.GetChildContentAsync().ConfigureAwait(true);
string innerContent = childContent.GetContent();
output.Content.AppendHtml(innerContent);
output.TagName = "div";
output.TagMode = TagMode.StartTagAndEndTag;
output.Attributes.Add("class", "btn-group btn-group-radio");
var modelExplorer = For?.ModelExplorer;
var metaData = For?.Metadata;
if (metaData?.EnumNamesAndValues != null)
{
foreach (var item in metaData.EnumNamesAndValues)
{
string enumId = $"{metaData.ContainerType.Name}_{metaData.PropertyName}_{item.Key}";
string enumInputLabelName = item.Key.ToString();
bool enumIsChecked = false;
if (Value != null)
{
if (enumInputLabelName == Value.ToString())
{
enumIsChecked = true; }
}
else
{
if (For.Model != null && enumInputLabelName == For.Model.ToString())
{
enumIsChecked = true;
}
}
var enumResourcedName = metaData.EnumGroupedDisplayNamesAndValues.FirstOrDefault(x => x.Value == item.Value);
if (enumResourcedName.Value != null)
{
enumInputLabelName = enumResourcedName.Key.Name;
}
var enumRadio = Generator.GenerateRadioButton(
ViewContext,
For.ModelExplorer,
metaData.PropertyName,
item.Key,
false,
htmlAttributes: new { @id = enumId });
enumRadio.Attributes.Remove("checked");
if (enumIsChecked)
{
enumRadio.MergeAttribute("checked", "checked");
}
output.Content.AppendHtml(enumRadio);
var enumLabel = Generator.GenerateLabel(
ViewContext,
For.ModelExplorer,
For.Name,
enumInputLabelName,
htmlAttributes: new { @for = enumId, @Class = "btn btn-default" });
output.Content.AppendHtml(enumLabel);
}
}
}
}
먼저 사용자 지정 HTML 도우미 만들기:
네임스페이스 인프라
공용 정적 클래스 HtmlHelpers: 개체 {static HtmlHelpers() { }
public static Microsoft.AspNetCore.Mvc.Rendering.SelectList DtatGetEnumSelectList<TEnum> (this Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper html, int? selectedValue = null) where TEnum : struct { var list = html.GetEnumSelectList<TEnum>().ToList(); var emptySelectListItem = new Microsoft.AspNetCore.Mvc.Rendering .SelectListItem(text: "Select an item", value: string.Empty); list.Insert(index: 0, item: emptySelectListItem); var result = new Microsoft.AspNetCore.Mvc.Rendering .SelectList(items: list, selectedValue: selectedValue, dataTextField: nameof(Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Text), dataValueField: nameof(Microsoft.AspNetCore.Mvc.Rendering.SelectListItem.Value)); return result; }
}
면도기 페이지에서 이 사용자 지정 HTML 도우미를 두 번째로 사용합니다.
asp-for="View Model"을 선택합니다.젠더" asp-items="@(Html.DtatGetEnumSelectList<도메인.Enums.Gender>(선택한 값: (int)Model.모델 보기.성별)"
언급URL : https://stackoverflow.com/questions/41740638/using-enum-for-dropdown-list-in-asp-net-mvc-core
'bestsource' 카테고리의 다른 글
문자열 목록을 구분 기호로 구분된 문자열로 변환 (0) | 2023.05.29 |
---|---|
사용 MongoClient(Mongoose 4.11.0)를 설정하는 방법은 무엇입니까? (0) | 2023.05.29 |
수학은 어때요?.NET Framework에 구현된 Pow()? (0) | 2023.05.29 |
Angular - 구성 요소에서 module.id 의 의미는 무엇입니까? (0) | 2023.05.29 |
ExecuteScalar, ExecuteReader 및 ExecuteNonQuery의 차이점은 무엇입니까? (0) | 2023.05.29 |