1

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

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

通常我会像这样添加复选框:@Html.CheckBoxFor(model => model.DoNotEmail)但显然这是错误的方式。

我是否需要为此复选框创建一个具有自定义属性的单独视图模型,还是有一些聪明的方法可以做类似的事情:(@Html.CheckBoxFor(model => !model.DoNotEmail) 这显然不起作用)?

4

2 回答 2

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;
}
于 2012-07-12T12:02:50.213 回答
2

可以称为解决方法的最简单方法是:

使 DontEmail 成为隐藏值。并创建一个复选框。将 jquery 事件绑定到它,并在选择时反转 DontEmail 的值。我希望我不需要输入代码来解释这一点。如果需要,请告诉我。

于 2012-07-12T11:56:47.357 回答