我无法正确地从模型中获取由枚举值填充的视图。
我尝试从这个帖子中读取来帮助我使用htmlhelper,但没有占上风: How find the enum name for corresponding value and use it in DisplayFor?
public static class HtmlExtensions
{
public static IHtmlString DisplayEnumFor<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, int>> ex, Type enumType)
{
var value = (int)ModelMetadata.FromLambdaExpression(ex, html.ViewData).Model;
string enumValue = Enum.GetName(enumType, value);
return new HtmlString(html.Encode(enumValue));
}
}
但是,唉,它不起作用。我收到了这条消息:
CS0266: Cannot implicitly convert type 'HiltiHaninge.Models.Discplines' to 'int'. An explicit conversion exists (are you missing a cast?)
我尽力不把它变成int,而是模型包含的那个值的字符串表示。观点:
@model HiltiHaninge.Models.CellEntity
@using HiltiHaninge.Helpers
@{
ViewBag.Title = "Ta bort pass " + @Html.DisplayFor(model => model.Id) + ", på " + @Html.DisplayFor(model => model.Day);
}
<h2>@ViewBag.Title</h2>
<h3>Är du säker på att du vill radera inlägget?</h3>
<fieldset>
<legend>Pass @Html.DisplayFor(model => model.Id)</legend>
<div class="display-label">
<p class="text_without_indent">Tid från: (TT-MM)</p>
</div>
<div class="display-field">
@Html.DisplayFor(model => model.TimeFromHour)
@Html.DisplayFor(model => model.TimeFromMinute)
</div>
<div class="display-label">
<p class="text_without_indent">Tid till: (TT-MM)</p>
</div>
<div class="display-field">
@Html.DisplayFor(model => model.TimeToHour)
@Html.DisplayFor(model => model.TimeToMinute)
</div>
<div class="display-label">
<p class="text_without_indent">@Html.DisplayNameFor(model => model.Discipline)</p>
</div>
<div class="display-field">
@Html.DisplayEnumFor(model => model.Discipline, typeof(HiltiHaninge.Models.Discplines))
</div>
<div class="display-label">
<p class="text_without_indent">@Html.DisplayNameFor(model => model.Level)</p>
</div>
<div class="display-field">
@Html.DisplayEnumFor(model => model.Level, typeof(HiltiHaninge.Models.Levels))
</div>
<div class="display-label">
<p class="text_without_indent">@Html.DisplayNameFor(model => model.Coach)</p>
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Coach)
</div>
</fieldset>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
<p>
<input type="submit" value="Ta bort" /> |
@Html.ActionLink("Tillbaka till listan", "Index")
</p>
}
任何人都有任何想法,我很感激。
答案 0 :(得分:3)
如果您只想将枚举值输出为字符串,那么您可以这样做:
<div class="display-field">
@Enum.GetName(typeof(HiltiHaninge.Models.Discplines), Model.Discipline)
</div>
答案 1 :(得分:2)
...然而
如果您只想修复displayFor方法,那么您可以将类型设为泛型而不是int,例如。
public static IHtmlString DisplayEnumFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> ex, Type enumType) where TValue : struct, IConvertible
{
var value = (int)ModelMetadata.FromLambdaExpression(ex, html.ViewData).Model;
string enumValue = Enum.GetName(enumType, value);
return new HtmlString(html.Encode(enumValue));
}
此外,我添加了通常用作枚举约束的内容。见:Create Generic method constraining T to an Enum
答案 2 :(得分:2)
这是broken and will not be fixed。
但您可以使用this解决方法。