MVC绑定复选框以反转其含义

时间:2012-07-12 11:32:25

标签: c# asp.net asp.net-mvc razor checkbox

在我的模型类中,我有一个布尔属性DoNotEmail

在UI设计中,我被赋予了创建视图,复选框的含义被反转;即复选框旁边的标签显示"Send Email"

通常我会添加如下所示的复选框:@Html.CheckBoxFor(model => model.DoNotEmail)但显然这是错误的方法。

我是否需要为此复选框创建一个带有自定义属性的单独视图模型,或者是否有一些聪明的方法可以执行以下操作:@Html.CheckBoxFor(model => !model.DoNotEmail)(显然不起作用)?

2 个答案:

答案 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的值。我希望我不需要输入代码来解释这一点。如果需要,请告诉我。