在我的模型类中,我有一个布尔属性DoNotEmail
。
在UI设计中,我被赋予了创建视图,复选框的含义被反转;即复选框旁边的标签显示"Send Email"
。
通常我会添加如下所示的复选框:@Html.CheckBoxFor(model => model.DoNotEmail)
但显然这是错误的方法。
我是否需要为此复选框创建一个带有自定义属性的单独视图模型,或者是否有一些聪明的方法可以执行以下操作:@Html.CheckBoxFor(model => !model.DoNotEmail)
(显然不起作用)?
答案 0 :(得分:3)
将实体直接传递到您的视图绝不是一个好主意,如果您的数据库架构发生变化,您将需要浏览所有视图并更新它们。我建议创建一个ViewModel
并仅传递视图所需的数据,然后在控制器中映射您的DoNotEmail
属性。这样,您可以在模型/视图之间保持抽象,并使您的视图保持简单,例如。
public void ViewModel
{
[DisplayName("Send Email")]
public bool SendEmailNotification { get; set; }
}
查看强>
@model ViewModel
@Html.CheckBoxFor(m => m.SendEmailNotifications)
<强>控制器强>
public void Post(ViewModel model)
{
var entity = ...;
entity.DoNotEmail = !model.SendEmailNotification;
}
答案 1 :(得分:2)
最简单的方法可以称之为解决方法:
将DontEmail设为隐藏值。 并创建一个复选框。将jquery事件绑定到它并在选中时反转DontEmail的值。我希望我不需要输入代码来解释这一点。如果需要,请告诉我。