c# - 如何使对象的数据类型在剃刀视图中接受布尔、字符串和对象
问题描述
我有一个类型为 BOOL、STRING 和 OBJECT 的问题列表模型。每当我选择任何响应时,它都必须将值绑定到模型,并在提交表单时必须发布值。
模型.cs
public enum QuestionType
{
bool,
list,
YesorNo
}
public class Question
{
public string Id{ get; set; }
public QuestionType Type{ get; set; }
public object ResponseValue{ get; set; }
public List<Option> Option { get; set; }
}
当问题类型为列表时,列表选项将列出选项。下面是选项模型
public class Option
{
public int Id{ get; set; }
public string name{ get; set; }
public bool selected{ get; set; }
}
因此,每当我回答以下问题时
- BOOL 类型,则该值应绑定为 True 或 False 到 ResponseValue
- LIST 类型然后它必须获取所有选定的选项以及 Id 和名称并将其绑定到 ResponseValue 作为对象
- YesorNo 那么该值应绑定为 Yes、NO 或 NA 到 ResponseValue
我正在使用 c# razor 视图进行模型绑定
@Html.CheckBoxFor(m => Model.ResponseValue, new { @class = "form-control" })
上面的代码由于其数据类型对象而引发错误,但 checkboxfor 仅接受 bool 数据类型。
请建议如何使 ResponseValue 接受所有数据类型(布尔、字符串和对象)
解决方案
如果你能想出一个不使用 的设计可能会更好object
,但如果没有其他方法,你可以使用类似以下的方法让它工作:
将变量转换为相应的类型:
@{
bool? responseValueBool = Model.ResponseValue as bool?;
}
在 HTML Helper 的调用中使用新变量:
@if (responseValueBool.HasValue)
{
var ResponseValue = responseValueBool.Value;
@Html.CheckBoxFor(m => ResponseValue, new {@class = "form-control"});
}
编辑:要在元素名称中包含索引,您可以将ResponseValues
放入列表中,以便您能够按预期以 的形式传递元素,如文档m => ResponseValue[index]
中所示,例如:
var ResponseValue = new List<bool> {responseValueBool.Value};
@Html.CheckBoxFor(m => ResponseValue[0], new {@class = "form-control", name="ResponseValue[1]"});
不过,您需要注意使用连续索引。请注意,您不必强制使用 HTML Helper,也可以自己创建 HTML 元素来避免这种变通方法。
推荐阅读
- javascript - 无法获取子元素的 href 值
- excel - while循环中的多个条件不起作用
- azure-hdinsight - 具有单个 ADLS gen2 存储的多个 HDInsight 群集
- java - Hikari 连接池没有增加
- python - 如何在 Python 中为 POST 请求传递一个查询参数?
- html - Angular 8 中使用 ngFor 的多级下拉菜单
- qt - 无法自动化windeployqt,未找到
- sql - 如何将值插入列并同时引用 Oracle 表中该列的前一个值?
- minio - 迷你吧。我无法运行 minio 集群。在从节点上收到此错误
- python - 如何在网页中基于十六进制字符串模式抓取数据