MVC Enums and Models in one View - Error: "is a type, which is not valid in the given context"
MVC Enums and Models in one View - Error: "is a type, which is not valid in the given context"
我正在尝试使用在控制器中传递的模型和我视图中的枚举。我不断收到错误消息,指出该类型在给定上下文中无效。我正在尝试使用扩展方法从枚举中获取显示值。通过的模型是数据库模型,因此我不想将枚举添加到模型中。
这是视图的一部分:
@model Domain.Models.Customer
@using Domain.Enums
@using (Html.BeginForm("CustomerEdit", "Customer", null, FormMethod.Post, false, null)) {
@Html.HiddenFor(model => model.Idcustomer)
<div class="row mb-2">
<div class="col-md-4">
@Html.LabelFor(model => model.Name, "Customer Name")
</div>
<div class="col-md-6">
@Html.TextBoxFor(model =>model.Name, new { @class="form-control"})
</div>
</div>
<div class="row mb-2">
<div class="col-md-4">
@Html.LabelFor(model => model.TimeZoneAdjustment, "Time Zone Adjustment")
</div>
<div class="col-md-6">
@Html.TextBoxFor(model =>model.TimeZoneAdjustment, new { @type="number", @class="form-control"})
</div>
</div>
<div class="row mb-2">
<div class="col-md-4">
@Html.LabelFor(model => model.IndividualRegistrationProvider, "Individual Registration Provider")
</div>
<div class="col-md-6">
<select class="form-control" id="@Html.IdFor(model => model.IndividualRegistrationProvider)">
<option selected>Select Individual Provider</option>
@foreach (var provider in RegistrationProviders)
{
<option value="@provider.GetDescription()">@provider.GetDescription()</option>
}
</select>
</div>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
}
以下 div 显示错误,但它在枚举旁边抱怨。
我试过了
@使用Domain.Enums
@using RegistrationEnum = Domain.Enums.RegistrationProviders
我也试过了
@foreach(Domain.Enums.RegistrationProviders 中的变量提供者)
枚举代码:
namespace Domain.Enums
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
public enum RegistrationProviders
{
[Description("Team")]
Team,
[Description("Play")]
Play,
[Description("Blue Star")]
BlueStar,
[Description("Other")]
Other,
[Description("None")]
None
}
}
分机号:[=13=]
public static class EnumExtensions
{
public static string GetDescription<T>(this T enumValue) where T: struct, IConvertible
{
if (!typeof(T).IsEnum)
{
return null;
}
var description = enumValue.ToString();
var fieldInfo = enumValue.GetType().GetField(description);
if(fieldInfo != null)
{
var attrs = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
if(attrs?.Length > 0)
{
description = ((DescriptionAttribute)attrs[0]).Description;
}
}
return description;
}
}
你应该 运行 foreach
像这样循环。
@foreach(RegistrationProviders provider in Enum.GetValues(typeof(RegistrationProviders)))
{
}
我正在尝试使用在控制器中传递的模型和我视图中的枚举。我不断收到错误消息,指出该类型在给定上下文中无效。我正在尝试使用扩展方法从枚举中获取显示值。通过的模型是数据库模型,因此我不想将枚举添加到模型中。
这是视图的一部分:
@model Domain.Models.Customer
@using Domain.Enums
@using (Html.BeginForm("CustomerEdit", "Customer", null, FormMethod.Post, false, null)) {
@Html.HiddenFor(model => model.Idcustomer)
<div class="row mb-2">
<div class="col-md-4">
@Html.LabelFor(model => model.Name, "Customer Name")
</div>
<div class="col-md-6">
@Html.TextBoxFor(model =>model.Name, new { @class="form-control"})
</div>
</div>
<div class="row mb-2">
<div class="col-md-4">
@Html.LabelFor(model => model.TimeZoneAdjustment, "Time Zone Adjustment")
</div>
<div class="col-md-6">
@Html.TextBoxFor(model =>model.TimeZoneAdjustment, new { @type="number", @class="form-control"})
</div>
</div>
<div class="row mb-2">
<div class="col-md-4">
@Html.LabelFor(model => model.IndividualRegistrationProvider, "Individual Registration Provider")
</div>
<div class="col-md-6">
<select class="form-control" id="@Html.IdFor(model => model.IndividualRegistrationProvider)">
<option selected>Select Individual Provider</option>
@foreach (var provider in RegistrationProviders)
{
<option value="@provider.GetDescription()">@provider.GetDescription()</option>
}
</select>
</div>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
}
以下 div 显示错误,但它在枚举旁边抱怨。
我试过了
@使用Domain.Enums
@using RegistrationEnum = Domain.Enums.RegistrationProviders
我也试过了
@foreach(Domain.Enums.RegistrationProviders 中的变量提供者)
枚举代码:
namespace Domain.Enums
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
public enum RegistrationProviders
{
[Description("Team")]
Team,
[Description("Play")]
Play,
[Description("Blue Star")]
BlueStar,
[Description("Other")]
Other,
[Description("None")]
None
}
}
分机号:[=13=]
public static class EnumExtensions
{
public static string GetDescription<T>(this T enumValue) where T: struct, IConvertible
{
if (!typeof(T).IsEnum)
{
return null;
}
var description = enumValue.ToString();
var fieldInfo = enumValue.GetType().GetField(description);
if(fieldInfo != null)
{
var attrs = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
if(attrs?.Length > 0)
{
description = ((DescriptionAttribute)attrs[0]).Description;
}
}
return description;
}
}
你应该 运行 foreach
像这样循环。
@foreach(RegistrationProviders provider in Enum.GetValues(typeof(RegistrationProviders)))
{
}