0

嗨,我是 MVC 4 的新手,我想创建一个验证应用程序,我的类之一是:

public partial class Division
{
    public Division()
    {
        this.Id = Guid.NewGuid();
        this.Persons = new HashSet<Person>();
        this.DevisionContnets = new HashSet<DevisionContnet>();
    }

    public System.Guid Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Person> Persons { get; set; }
    public virtual ICollection<DevisionContnet> DevisionContnets { get; set; }


    public virtual DateTime InsertDate { get; set; }
      public Nullable<System.DateTime> UpdateDate { get; set; }
      public Nullable<System.Guid> InsertUid { get; set; }
      public Nullable<System.Guid> UpdateUid { get; set; }
      public string UpdateStatment { get; set; }}

我不想让用户看到插入或更新属性,我只是为了监控!当我从脚手架视图中删除它们时,它给我一个错误指示内部异常 datetime 2 out of range 例如我在编辑或创建视图中所做的事情:

        <fieldset>
    <legend>Division</legend>

    @Html.HiddenFor(model => model.Id)

    <div class="editor-label">
        @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name)
    </div>

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>

那么为什么我得到一个错误并且我的对象将日期返回到 01/01/0001?

4

3 回答 3

1

为了使您的属性在脚手架时不可用,您可以执行以下操作:

[ScaffoldColumn(false)]
public virtual DateTime InsertDate { get; set; }

[ScaffoldColumn(false)]
public Nullable<System.DateTime> UpdateDate { get; set; }
于 2013-10-25T06:45:14.763 回答
0

要通过数据注释从 UI 中隐藏属性,请使用

[ScaffoldColumn(false)] 并且它们将被编辑器模板忽略。

于 2013-10-25T06:48:09.767 回答
0

那是因为您删除了引用的字段并阻止控制器从这些字段中获取该数据!要隐藏您的输入字段,只需向您的实体类添加注释:

    public partial class Division
{
    public Division()
    {
        this.Id = Guid.NewGuid();
        this.Persons = new HashSet<Person>();
        this.DevisionContnets = new HashSet<DevisionContnet>();
    }

    public System.Guid Id { get; set; }
    public string Name { get; set; }

    public virtual Grade Grade { get; set; }
    public virtual ICollection<Person> Persons { get; set; }
    public virtual ICollection<DevisionContnet> DevisionContnets { get; set; }

    [HiddenInput(DisplayValue = false)] // this will hide your data fields
    public virtual DateTime InsertDate { get; set; }
    [HiddenInput(DisplayValue = false)]
    public Nullable<System.DateTime> UpdateDate { get; set; }
    [HiddenInput(DisplayValue = false)]
    public Nullable<System.Guid> InsertUid { get; set; }
    [HiddenInput(DisplayValue = false)]
    public Nullable<System.Guid> UpdateUid { get; set; }
    [HiddenInput(DisplayValue = false)]
    public string UpdateStatment { get; set; }

}

并通过删除脚手架标签将您的字段保留在您的视图中

更新: 也建议按照问题评论中的建议使用 ViewModel

使用 [ScaffoldColumn(false)] 可以做同样的事情,但不会生成这些值,所以如果你想使用它们,你将无法使用这些字段,所以你有选择!

于 2013-10-25T06:39:30.950 回答