将多个单选按钮绑定到单个布尔值

2024-02-26

背景

我有一个包含三个布尔值的模型

public class PageDataModel
{
    public bool setting1 { get; set; }
    public bool setting2 { get; set; }
    public bool setting3 { get; set; }
}

如果一个值为 true,则其他值必定为 false。

在我看来,我显示了三个单选按钮:

我的观点的 Razor 代码:

<div class="row">
        <div class="radio">
            @if (Model.Setting1)
            {
                @Html.RadioButtonFor(m => m.Setting1,  "Setting1", new { Checked = "checked", Name = "Group"})
            }
            else
            {
                @Html.RadioButtonFor(m => m.Setting1, "Setting1", new { Name = "Group"})
            }

            @Html.Label("Setting1")
        </div>
        <div class="radio">
            @if (Model.Setting2)
            {
                @Html.RadioButtonFor(m => m.Setting2, "Setting2", new { Checked = "checked", Name = "Group" })
            }
            else
            {
                @Html.RadioButtonFor(m => m.Setting2, "Setting2", new { Name = "Group"})
            }
            @Html.Label("Setting2")
        </div>
        <div class="radio">
            @if (Model.Setting3)
            {
                @Html.RadioButtonFor(m => m.Setting3, "Setting3", new { Checked = "checked", Name = "Group" })
            }
            else
            {
                @Html.RadioButtonFor(m => m.Setting3, "Setting3", new { Name = "Group"})
            }
            @Html.Label("Setting3")
        </div>
        <button type="submit" class="btn btn-default">Save</button>
    </div>

在我的控制器中,我返回一个设置为 true 的模型:

var model = new PageDataModel
        {
            Setting1 = true,
            Setting2 = false,
            Setting3 = false
        };
        return View(model);

这工作正常,页面加载时选中了“设置 1”单选按钮。

问题

当我提交表单时,发布的模型包含所有错误值,无论选中哪个单选按钮。

我尝试将值从“setting1”更改为 true/false,但这对返回的数据没有影响。

我相当确定我没有正确设置绑定,但我不确定哪里出了问题。

我发现的所有其他示例都是将两个单选按钮绑定到一个布尔值(例如,一对是/否单选按钮绑定到一个布尔值)。我可以更改代码以使用一个 int 属性,但我想使用 bool 来解决这个问题。

我究竟做错了什么?我在这里滥用单选按钮吗?


从技术上讲,只要您将值设置为true。例如:

@Html.RadioButtonFor(m => m.setting1, true)

这样,如果选择了收音机,它将发布true.

然而,这里无法克服的问题是,这不是无线电设计的工作原理。无线电是组的一部分,由组的值决定name属性。这会导致选择一个无线电取消选择所有具有相同无线电的无线电name属性。使用RadioButtonFor不过,将根据属性名称为每个无线电指定不同的名称。换句话说,你最终会得到:

<input type="radio" id="setting1" name="setting1" value="true" />
<input type="radio" id="setting2" name="setting2" value="true" />
<input type="radio" id="setting3" name="setting3" value="true" />

那么,每个无线电都将是不同组的一部分,每个无线电仅由一个无线电组成(这意味着默认情况下将选择每个无线电)。您可以覆盖名称属性,但发布的值将不再绑定到实际属性。例如,如果您有:

<input type="radio" id="setting1" name="setting" value="true" />
<input type="radio" id="setting2" name="setting" value="true" />
<input type="radio" id="setting3" name="setting" value="true" />

这样它们现在都是同一个无线电组的一部分,该值将被发布到setting它会always是真实的。

总而言之,没有办法让这项工作像这样进行。你什么can做的是使用另一个属性代理该值。

public class PageDataModel
{
    public bool setting1 { get; set; }
    public bool setting2 { get; set; }
    public bool setting3 { get; set; }

    public string SelectedSetting
    {
        get
        {
            if (setting1) return "setting1";
            if (setting2) return "setting2";
            if (setting3) return "setting3";
            return null; // or you can set a default here
        }
        set
        {
            switch (value)
            {
                case "setting1":
                    setting1 = true;
                    break;
                case "setting2":
                    setting2 = true;
                    break;
                case "setting3":
                    setting3 = true;
                    break;
            }
        }
    }
}

那么,在你看来:

<div class="radio">
    <label>
        @Html.RadioButtonFor(m => m.SelectedSetting, "setting1")
        @Html.DisplayNameFor(m => m.setting1)
    </label>
</div>
<div class="radio">
    <label>
        @Html.RadioButtonFor(m => m.SelectedSetting, "setting2")
        @Html.DisplayNameFor(m => m.setting2)
    </label>
</div>
<div class="radio">
    <label>
        @Html.RadioButtonFor(m => m.SelectedSetting, "setting3")
        @Html.DisplayNameFor(m => m.setting3)
    </label>
</div>

现在,无线电将全部分组为“SelectedSetting”并将发布到SelectedSetting财产。该属性上的自定义 getter 和 setter 可确保在实际情况下设置正确的布尔值settingX特性。

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

将多个单选按钮绑定到单个布尔值 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 良好的 WiX 编辑器 [重复]

    这个问题在这里已经有答案了 我目前正在开发一个使用 WiX 创建 MSI 的项目 我过去在 Sourceforge 上使用 WiXEdit 来管理包含在 WiX 项目中的文件 因为它比直接操作 XML 稍微容易一些 但它仍然有点笨重 有谁知
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 滚动视图内的地图 Recyclerview 在滚动时显示黑色闪烁背景

    我在 recyclerview 行中使用了地图视图 我已附上屏幕截图 滚动地图时显示黑色闪烁背景 适配器代码 Override public RecyclerView ViewHolder onCreateViewHolder ViewGr
  • Emacs 没有看到 Org-Mode 的新安装

    我已经从 emacs list packages 安装了 org mode 版本 8 2 1 我下载了最新版本 8 2 4 并将其放在 emacs d 中 并将以下内容添加到我的 emacs 中 add to list load path
  • 带 Cookie(或标头)的 VideoView

    我正在尝试使用 android widget VideoView 来流内容 我需要确保在使用 setVideoURI Uri 时 VideoView 将包含之前 HttpClient 调用中的 Cookie 我在源代码中看到有 setVid
  • 运行但不执行任何 Spark 应用程序的 Azure Databricks 集群的成本[已关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我一直在阅读 Azure Databricks定价详情 https azure microsoft com en us pricing
  • 使用 LESS mixin 添加供应商前缀

    我收到此混合的语法错误 vendors statement statement moz statement webkit statement 任何方法都可以做到这一点 或者混合变量必须位于 a 的右侧 从 Less v2 开始 你可以使用自
  • 资源文件中的最终变量

    我和一些人有一个活动final变量 我将它们的值 假设它们都是字符串 提取到资源文件中 问题 如果我直接在实例化时分配它们 如下所示 private final String PREFERENCE NAME getResources get
  • spring 将属性文件中的值传递给注释

    我有 spring 应用程序的 application properties 文件 其中包含一些简单的属性 queue my test q 在java代码中我需要将队列指定为 RabbitListener Component public
  • 使用 Subversion 合并两个分支修订

    我想合并 rev 10 和 HEAD rev 之间发生的所有更改http url of branch a http url of branch a并将它们应用到http url of branch b http url of branch
  • Rails i18n - 翻译带有链接的文本

    我想国际化如下所示的文本 已经注册了 Log in http example com 请注意 文本上有一个链接 在此示例中 它指向 google 实际上 它将指向我的应用程序log in path 我找到了两种方法来做到这一点 但没有一种看
  • 对于定点组合器 Y,什么是 \x.f(xx)

    对于 Y 组合子定理 For every function F there exists an X such that FX X 什么是F意思是这里 固定点是什么F x x 1 我的理解是x 1 x没有解决办法吗 对于下面的证明 For a
  • 检查 ArrayList 是否包含另一个 ArrayList 中的每个元素

    我在这里可能找不到一句简单的话 但这是我的问题 如何检查 ArrayList 是否包含另一个 ArrayList 中的所有对象 我正在寻找 如果存在的话 类似的东西 INCORRECT EXAMPLE if one contains two
  • 在 JavaScript 中创建 ISO 日期对象

    我设置了一个 mongo 数据库 在 mongoDb 中创建新的日期对象 创建 ISO 格式的日期对象 例如 ISODate 2012 07 14T00 00 00Z 我正在使用 node js 连接到 mongo 数据库并查询数据库 每当
  • NodeJS、OpenCV 和使用 Net Socket 的流图像

    我的最终目标是将视频从我的笔记本电脑流式传输到服务器 我正在尝试通过在笔记本电脑和服务器上使用 NodeJs 来完成此任务 我使用 OpenCV 库在笔记本电脑上捕获视频并将其保存为 jpg 文件 然后 我读取该文件并将其转换为 base6
  • 远程 ListView 在 Android 小部件上闪烁

    我在远程列表视图方面遇到了意外的麻烦问题 我的应用程序有一个简单的小部件 其中包括一个列表视图 如果列表视图的单元格高度为 1 并且列表视图位于滚动的开始处 则每次调用 datasetchanged 时它都会闪烁 闪烁 有趣的是 如果列表视
  • Yii2 日期比较验证

    我有如下所示的模型规则 但它不起作用 它总是显示错误消息 public function rules return start date end date date format gt php F d Y start date compar
  • 如何在 MATLAB 中对连接的点进行聚类?

    想象一下 我们有很多点 其中一些点连接在一起 我们想要将它们聚类 请看下图 如果我们有 连接矩阵 点 我们如何将它们聚类为两组 连接点组 ConnectivityMatrix 1 2 1 3 2 4 2 3 2 1 3 1 3 2 3 4
  • startMonitoringSignificantLocationChanges 和 startUpdatingLocation 如何相互影响?

    如果我打电话会发生什么startUpdatingLocation while startMonitoringSignificantLocationChanges在跑 重要的位置变化监控是否停止 如果我那么stopUpdatingLocati
  • JSON 字符串错误地映射到文本视图

    我有 3 个文本视图 我试图用 JSON Http 响应中的数据填充它们 但它们当前填充的是响应中的错误数据 由于某种原因 它没有解析字段并正确分配它们 看起来它只是用 JSON 响应中的数据开头填充每个文本视图 截屏 JSON HTTP
  • 如何添加 MSAccess 连接到 CodeIgniter 或 CakePHP?

    我正在尝试使用 Microsoft Access 数据库进行演示项目 我正在考虑在 CodeIgniter 或 CakePHP 中进行该项目 忽略使用 Microsoft Access 可能存在的愚蠢行为 我无法准确地弄清楚连接字符串如何与
  • 将多个单选按钮绑定到单个布尔值

    背景 我有一个包含三个布尔值的模型 public class PageDataModel public bool setting1 get set public bool setting2 get set public bool setti