枚举类型的复选框列表 MVC Razor

2024-02-23

在我的 c#.net MVC 应用程序中,我想显示枚举类型的复选框列表。

我有一个枚举类型

[Flags]
public enum ModeType
{
Undefined = 0,
Read= 1,
Edit= 2
  }

我的模型是

Public TrainingModel
   {
         public int UserID {get;set;}
         public ModeType Type {get;set}
   }

在我看来,我需要两个复选框,一个用于读取,另一个用于编辑 所以我尝试了

    @Html.CheckBoxFor(m => m.Type== ModeType.Read)
@Html.CheckBoxFor(m => m.Type== ModeType.Edit)

但这给了我错误 “模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。”

我通过向模型添加另外两个属性来解决这个问题

 Public TrainingModel
   {
         public int UserID {get;set;}
         public ModeType Type {get;set}
         public bool IsRead
         {
           get{Type.HasFlag(ModeType.Read);}
           set{Type |=ModeType.Read;}
         }
         public bool IsEdit
         {
           get{Type.HasFlag(ModeType.Edit);}
           set{Type |=ModeType.Edit;}
         }

   }

然后提出我的观点

@Html.CheckboxFor(m => m.IsRead)
@Html.CheckboxFor(m => m.IsEdit)

我知道我的方法是不正确的,应该有更好的方法来实现这一目标。 有人可以就此给我建议吗?


以下是我解决此问题以将枚举转换为选择列表的方法。 Enum.cshtml(一个编辑器模板,带有指向它的 UI 提示):

@model Enum
@Html.DropDownListFor(model => model, Model.ToSelectList(), "Select")

然后视图中使用的Extension方法:

    /// <summary>
    /// Gets a select list from an enum.
    /// </summary>
    /// <param name="enumObject">The enum object.</param>
    /// <returns></returns>
    public static SelectList ToSelectList(this Enum enumObject)
    {
        List<KeyValuePair<string, string>> selectListItemList = null;
        SelectList selectList = null;

        try
        {
            // Cast the enum values to strings then linq them into a key value pair we can use for the select list.
            selectListItemList = Enum.GetNames(enumObject.GetType()).Cast<string>().Select(item => { return new KeyValuePair<string, string>(item, item.PascalCaseToReadableString()); }).ToList();

            // Remove default value of Enum. This is handled in the editor template with the optionLabel argument.
            selectListItemList.Remove(new KeyValuePair<string, string>("None", "None"));

            // Build the select list from it.
            selectList = new SelectList(selectListItemList, "key", "value", enumObject);

        }
        catch (Exception exception)
        {
            Functions.LogError(exception);
        }

        return selectList;
    }

要将此解决方案重构为复选框列表,您只需从函数传回键值对并在编辑器模板中循环遍历它们即可。

我希望这有一些帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

枚举类型的复选框列表 MVC Razor 的相关文章

随机推荐

  • 使用正确的权限在 ASP.NET/C# 中启动服务

    在我的网站 用 ASP NET C 编写 上 我希望管理员能够启动某个服务 我为此的代码是 ServiceController svcController new ServiceController InvidualFileConversi
  • 什么时候可以不正常化? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何更改 c3 饼图中图例的文本

    如何更改饼图图例的文本 我在我的 php 页面中使用 c3 图表 我已经阅读了 c3 图表的文档 但没有运气 目前我正在使用这段代码 它显示图例true但我无法更改我尝试过的文本 var chart c3 generate bindto c
  • 了解域对象+数据映射器模式?

    我过去一直使用各种 ORM 并将所有逻辑放在模型中 无论其性质如何 SQL MongoDB 查询 甚至获取远程 JSON 对象 但是 当需要确保松散耦合以实现高水平的可测试性时 这种方法的问题很快就会出现 今天我读到了有关将模型分为两部分的
  • 为什么 css .hover div 会“闪烁”?

    我的网站上有一些 选项卡 包含文本 当鼠标悬停时 选项卡会展开并显示更多文本 出于我们的意图和目的 选项卡是某种菜单 但问题是 当鼠标悬停在上面时 选项卡会正确展开 因为悬停应该使它这样做 但然后很快 闪 回其原始大小 然后立即恢复到其悬停
  • TortoiseGit 到 Gitlab 存储库 HTTP 基本访问被拒绝

    自从 TortoiseGit 从 2 6 0 0 更新到 2 7 0 0 后 我无法再通过使用 TortoiseGit 访问我的 GitLab 我设法在 2 6 上获取 拉取和推送 但截至今天 在 2 7 上这不起作用 我有两台设置完全相同
  • 在 C# 事件处理程序中,为什么“sender”参数必须是对象?

    根据Microsoft 事件命名指南 https msdn microsoft com en us library h0eyck3s 28VS 71 29 aspx the senderC 事件处理程序中的参数 是always类型对象 即使
  • Wayland 上的屏幕截图显示为黑色

    我找到了这个code http ted mielczarek org code screenshot 在 Ted Mielczarek 网站上截取屏幕截图 gdk screenshot cpp Save a screenshot of th
  • 假“点击”来激活 onclick 方法

    我有一个元素onclick method 我想在另一个函数中激活该方法 或者 假装单击该元素 这可能吗 选择元素后 您可以调用 click document getElementById link click see https devel
  • apache 如何知道 SAML 响应已通过身份验证

    我是 Apache 和 SAML 的新手 我的 my app httpd conf 文件中有以下配置 它将未经身份验证的请求重定向到正常工作的 OKTA
  • 为什么此查询会在 Oracle 中产生 MERGE JOIN CARTESIAN?

    这是我的查询 select count from email prod junc j inner join trckd prod t5 on j trckd prod sk t5 trckd prod sk inner join prod
  • 如何在 Xamarin.Forms 中的网格中启用边框

    我正在 Xamarin Forms 中构建网格 我想添加像表格一样的边框 我以为可以在定义行和列时添加边框 但失败了 谁能帮我 这是我当前的代码 Grid grid new Grid VerticalOptions LayoutOption
  • 如何在 C# 中使用 FILE_ATTRIBUTE_TEMPORARY 创建文件?

    如何在 C 中使用 FILE ATTRIBUTE TEMPORARY 创建文件 所以将数据存储在Ram中但能够将其用作普通文件 我相信你必须使用 P Invoke 来调用本机CreateFile然后使用文件流 安全文件句柄 文件访问 htt
  • SQL Server 返回意外的周数

    我的表中有一些订单 2011 年的最后订单日期是 12 月 20 日 我使用 sql 命令来计算给定一周内的订单数 SELECT CONVERT VARCHAR 3 DATENAME week convert datetime order
  • ASP.NET 如何知道在回发期间触发哪个事件?

    在回发期间 EVENTTARGET表单变量保存name of the control发出回发 如果控件支持多个服务器端事件 ASP NET 如何知道要为该控件触发哪个事件 正如 Wiktor 提到的 ASP Net 中的许多控件已经为您以某
  • Inno Setup - 如何本地化组件和类型名称?

    如何本地化组件和类型名称 例如 Languages Name eng MessagesFile Idiomas English isl Name spa MessagesFile Idiomas Spanish isl 如果我选择英语 Ty
  • iOS CPU 配置文件:为什么这个线程会占用 99.9% 的 CPU?

    有时 当我加载表视图时 除了让表视图显示之外 我没有故意执行任何活动 我会等待几秒钟 然后 CPU 使用率就会飙升 我怎样才能找到原因 为什么这个线程会占用 99 9 的 CPU 我不知道 但这里有一些想法 负责的图书馆是UIKit 所以看
  • 暴露 Google Container Engine 中的两个端口

    是否可以在 Google 容器引擎中创建一个公开两个端口的 Pod 端口 8080 正在侦听传入内容 端口 80 将此内容分发给客户端 Google 给出了以下创建 Pod 的命令作为示例 kubectl run hello node im
  • JavaScript JSON 解析器告诉错误位置

    我在解析通过 WebSocket 接收的 JSON 时遇到了一些麻烦 原始问题 解析通过 WebSocket 接收到的 JSON 会导致错误 https stackoverflow com questions 7116035 parse j
  • 枚举类型的复选框列表 MVC Razor

    在我的 c net MVC 应用程序中 我想显示枚举类型的复选框列表 我有一个枚举类型 Flags public enum ModeType Undefined 0 Read 1 Edit 2 我的模型是 Public TrainingMo