MVC 使用 Html.CheckBoxFor 和 nullable Bool

2023-11-21

我有一个复选框,我想在与称为公共的字段相关的视图上显示该复选框,该复选框基本上说明特定行是否是公共的。在数据库中,这是一个位字段,但由于表以前的工作方式,它允许为空。

我正在使用 Html.CheckBoxFor 但它抱怨这个字段,因为在系统中它不是 bool 类型,而是 bool?类型。我想要做的是拥有它,以便如果字段值为空,那么它在前端被视为错误(不幸的是更新数据库值本身不是一个选项)。

我尝试使用 GetValueOrDefault,并按照以下方式在模型文件中添加默认值:

public class Model
{
    public bool? Public { get; set; }

    public SearchModel()
    { 
        Public = false;
    }
}

然而它抱怨这一点,给了我以下错误:

An exception of type 'System.InvalidOperationException' occurred in System.Web.Mvc.dll but was not handled in user code

Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

所以我不确定如何从这里取得进展,有人可以帮助我指出正确的方向吗?

EDIT:

这是我试图用来显示复选框的视图上的代码。在本例中,我添加了一些额外的 html 属性,以便它显示为切换而不是简单的复选框:

Html.CheckBoxFor(model => model.Public, new {data_toggle = "toggle", data_off = "No", data_on = "Yes", data_size = "small"})

当您将表达式传递给无法计算的模板化帮助器之一时,会发生您遇到的特定异常。请记住,当您使用基于表达式的帮助器时,您实际上并不是按值传递属性,而是传递一个表达式代表模型上的属性,助手将使用该属性来引用该属性、生成字段名称等。

您尚未显示执行此操作的实际代码,但这意味着您基本上不能执行以下操作:

@Html.EditorFor(m => m.Public.GetValueOrDefault())

因为模板化助手无法将其解析为与模型上的属性匹配的表达式。

至于您在这里实际关心的问题,即如果该值为 null,则将其设置为 false,您只需要一个自定义的 getter 和 setter。 @utaco 的答案提供了带有默认值的自动实现属性的新的更简单的 C# 6.0 方法:

public bool? Public { get; set; } = false;

对于以前版本的 C#,您需要以下内容:

private bool? public;
public bool? Public
{
    get { return public ?? false; }
    set { public = value; }
}

然而,保持Public当你不希望它实际上为 null 时,将其作为可为 null 的 bool 只会使你的代码变得更加困难。假设你可以将其更改为bool(即这是一个视图模型,而不是绑定到数据库表的实际实体类),那么您应该这样做。不过,您仍然希望将私有保留为可为空。这允许您在 setter 中接受空值,但将它们强制为falsegetter 中的值,这意味着 public 的实际值始终是true or false,即不为空。

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

MVC 使用 Html.CheckBoxFor 和 nullable Bool 的相关文章

随机推荐

  • 使用 Expo (React Native) 的 Firebase Firestore 缺少或权限不足

    我一直在使用 FireStore 进行一个在浏览器中运行良好的项目 但是当我将代码移植到 Expo 并在模拟器中的 iOS 11 2 iPhone X 上运行时 它不断提高Error Missing or insufficient perm
  • 递归 setInterval() 连续运行

    我试图使用 JavaScript 使用递归 setInterval 函数每 5 秒运行一个函数 以下代码只是尽快记录 启动 然后使浏览器崩溃 为什么它不是每 5 秒运行一次 function five console log five se
  • pandas 应用正则表达式来替换值

    我已将一些定价数据读取到 pandas 数据框中 这些值显示为 40 000 40000 conditions attached 我想将其精简为数值 我知道我可以循环并应用正则表达式 0 9 每个字段然后将结果列表重新连接在一起 但是有没有
  • 使用 Itext 替换 PDF 文件中的字符串,但字母 X 不替换

    我正在尝试替换的内容PDF在一篇文本中 但字母 X 未被替换 public static void main String args String DEST home diego Documentos teste pdf try PdfRe
  • jpa hibernate复合外键映射

    我在为某些实体设置 jpa 映射时遇到问题 我有一个如下定义的父实体 Entity Table name EIF INSTANCE HDR public class InstanceEntity implements Serializabl
  • 从另一个文件覆盖 JS 函数

    我试图重写 Bigcartel 的 JS 函数 我无法访问 JS 文件 原文是 updateCart function cart aside cart count main header cart htmlHighlight cart it
  • DevArt 的 dotConnect for Oracle 与 DataDirect 的 ADO.NET 数据提供程序

    有没有人对 DevArt 的 dotConnect for Oracle 和来自 DataDirect 的 ADO NET 数据提供程序 我们正在考虑将这些框架中提供的实体框架支持用于关键企业应用程序 我读过的一些文章提出了以下建议 Dev
  • 如何使用 javascript 将值从一个 html 页面传递到另一个 html 页面

    在第一页中 我在文本框中获取值 我需要将其传递到另一个页面 该页面分为 2 个框架 我需要在第一帧的 html 页面中显示该值 请给我一个简单的例子 我尝试过 window document getElementById inputbox1
  • 在 .Net Framework 的 Git 操作中运行 Nunit 测试

    我正在使用 NUnit Framework 来测试我的 NET Framework 项目 我想通过 GitHub Actions 运行我的测试 yml 文件 build runs on windows latest steps uses a
  • 如何使项目符号直接出现在 python 的 reportlab 包中缩进列表的文本旁边?

    我正在使用reportlab 2 6 的ListFlowable 来制作带有彩色圆圈项目符号的项目符号列表 但是 我希望项目符号显示在文本旁边 而不是与前面的非缩进文本对齐 我尝试打开 ListFlowable 源代码 但在那里找不到太多内
  • 无需开发者帐户的 Apple 推送通知

    我知道 需要注册Apple开发者帐户才能使用推送通知吗 对于已经拥有开发人员的其他人来说可能吗 为我生成证书的帐户 还是受到 Apple 限制 据我所知 还没有 我开发移动应用程序已经五年了 即使您使用的是 Firebase Cloud M
  • 将参数传递给 angularjs 过滤器

    是否可以将参数传递给过滤器函数 以便可以按任何名称进行过滤 就像是 scope weDontLike function item name console log arguments return item name name 实际上还有另
  • 使用 Ajax 和 jQuery 检查文件是否存在 - 始终返回 200 响应

    所以我需要在向客户端显示特定数据之前检查文件是否存在 使用 jQuery 我有这个 当我尝试运行该函数时 其中 example com 是我的域名 我总是收到 200 响应代码 我想知道
  • Django、Virtualenv、nginx + uwsgi导入模块wsgi报错

    我尝试使用 nginx virtualenv 和 uwsgi 在临时服务器上设置我的 django 项目 但我不断收到导入模块 wsgi 错误 如果有一个社区我可以在这里找到答案 提前谢谢大家 这是我的配置文件 我的 django 项目上的
  • 如何在SSIS包中参数化数据库连接字符串?

    我有一个在 Business Intelligence Development Studio 中构建的 SSIS 包 其中指定了源数据库和目标数据库 现在我想使用一些变量来参数化数据库连接并在命令行中运行包 我尝试用变量 User Sour
  • 模拟和网络凭据

    我需要通过一个NetworkCredential对象 其中包含当前模拟的用户从 ASP NET 应用程序访问 Web 服务的凭据 我的代码如下所示 WindowsIdentity windowsIdentity HttpContext Cu
  • Git - 暂时保存当前工作

    我正在 master 分支上添加一个功能 更改几个文件后 我意识到我需要在没有更改的情况下检查输出 我能想到的办法是 提交当前更改 签出并切换到新分支 在新分支中 git reset hard HEAD 这样我就可以回到原来的代码了 尝试代
  • 以步进增量滚动水平 UIScrollView?

    我有一个可以水平滚动的 UIScrollView 可滚动的内容按列显示 有没有办法使滚动仅以步进增量而不是像素移动 即一次移动一列 Diagram 是的 有 yourScrollView pagingEnabled YES 检查UI滚动视图
  • Python3 以网络摄像头 fps 处理并显示网络摄像头流

    如何读取相机并以相机帧速率显示图像 我想连续从网络摄像头读取图像 进行一些快速预处理 然后在窗口中显示图像 这应该以我的网络摄像头提供的帧速率 29 fps 运行 OpenCV GUI 和 Tkinter GUI 似乎太慢 无法以这样的帧速
  • MVC 使用 Html.CheckBoxFor 和 nullable Bool

    我有一个复选框 我想在与称为公共的字段相关的视图上显示该复选框 该复选框基本上说明特定行是否是公共的 在数据库中 这是一个位字段 但由于表以前的工作方式 它允许为空 我正在使用 Html CheckBoxFor 但它抱怨这个字段 因为在系统