【问题标题】:Including a field in the View that is not part of the data model在视图中包含不属于数据模型的字段
【发布时间】:2016-05-11 21:11:07
【问题描述】:

在视图中包含数据库中没有相应列的日期字段的最佳方法是什么?例如:

Model:
[DataType(DataType.Date)]
[Display(Name = "Review Date")]
[Required]
public DateTime? ReviewDate { get; set; }


View:
@model Model.Employee
...
<div>
@Html.LabelFor(model => model.ReviewDate)
@Html.EditorFor(model => model.ReviewDate)
@Html.ValidationMessageFor(model => model.ReviewDate})
</div>

但我在数据库表中没有 ReviewDate 列。我只需要在视图中使用它来收集用户的日期条目以进行其他处理,但这不是我的数据模型的一部分。我想把它包含在模型类中,这样我就可以控制属性进行验证等。

对此最好的方法是什么?我应该从模型中删除它并在视图中只保留一个独立的 HTML 日期字段吗?如果是这样,我如何确保验证仍然适用于该字段?

【问题讨论】:

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


    【解决方案1】:

    只需创建一个包含特定视图所需属性的 ViewModel。

    public class EmployeeEditViewModel
    {
        [DataType(DataType.Date)]
        [Display(Name = "Review Date")]
        [Required]
        public DateTime? ReviewDate { get; set; }
    
        public EmployeeModel Employee { get; set; }
    }
    

    然后在你的 Razor 中,你可以按照以下方式做一些事情:

    @model ViewModel.EmployeeEditViewModel
    ...
    <div>
        @Html.LabelFor(model => model.ReviewDate)
        @Html.EditorFor(model => model.ReviewDate)
        @Html.ValidationMessageFor(model => model.ReviewDate)
    </div>
    <div>
        @Html.LabelFor(model => model.Employee.SomeValue)
        @Html.EditorFor(model => model.Employee.SomeValue)
        @Html.ValidationMessageFor(model => model.Employee.SomeValue)
    </div>
    

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多