【发布时间】:2016-11-08 14:55:55
【问题描述】:
我有一个复选框,我想在我的视图中显示一个与名为 public 的字段相关的复选框,它基本上说明了特定行是否是公共的。在数据库中,这是一个位字段,但它允许空值,因为该表以前是如何工作的。
我正在使用 Html.CheckBoxFor 但它抱怨这个字段,因为在系统中它不是 bool 类型,而是 bool?类型。我想要做的是,如果字段值为 null,那么它在前端被视为 false(不幸的是,更新数据库值本身不是一种选择)。
我尝试使用 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.
所以我不确定我该如何从这里取得进展,有人可以帮我指出正确的方向吗?
编辑:
这是我试图用来显示复选框的视图上的代码。在这种情况下,我添加了一些额外的 html 属性,以便它显示为切换而不是简单的复选框:
Html.CheckBoxFor(model => model.Public, new {data_toggle = "toggle", data_off = "No", data_on = "Yes", data_size = "small"})
【问题讨论】:
-
我不得不质疑为什么有人会调用变量
Public,在不相关的注释上,您的模型称为Model,但它的构造函数称为SearchModel,这样就可以了造成一些问题 -
听起来您正在将模型绑定到 EF 实体。这是非常不灵活的,通常不是一个好主意。
-
@AlfieGoodacre 好点,我一直在改变一些东西,一定错过了。至于变量,这就是在数据库中调用该字段的内容,因此我在模型文件中保持变量名称相同。不幸的是,我对数据库字段的名称没有任何发言权
-
要使您的代码正常工作,您需要实例化模型并将其传递给视图,例如模型模型 = 新模型();返回视图(模型);也许一些控制器操作代码将有助于识别问题。
标签: c# asp.net-mvc