2013-10-25 54 views
0

嗨,我是在MVC 4個新的,我想用驗證創建一個應用程序 我班的一個是:爲什麼我輸入返回驗證錯誤例外MVC

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; }} 

我不希望用戶看到插入或更新屬性,我只用於監控! 當我刪除那些從腳手架的觀點它讓我有錯誤Indicatce到內部異常的日期時間2超出範圍的一個例子是什麼,我就做編輯或創建視圖:

 <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?

+0

最好使用ViewModel幷包含用戶要插入或更新的字段,並在保存時使用Guid和InsertDate將該用戶提交的數據分配給您的類。 – 111

+0

我應該爲每一堂課創建一個ViewModel嗎?當我在當前項目中使用40個表格時,我不是一個解決方案,而且我有一些簡單的類,比如分區如何處理複雜的問題? – user2918732

+0

在你的實體類和DTO之間建立數據契約是一個很好的設計。 – 111

回答

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; } 

} 

,並保持你的領域在你的看法與移除

更新腳手架標籤

Alsow我們推薦使用視圖模型作爲推薦在問題評論

使用[ScaffoldColumn(false)]可以做同樣的事情,但是這些值不會被生成,所以如果你想使用它們,你將無法使用這些字段,所以你有選擇!

+0

謝謝你的工作在創建 – user2918732

1

製作,而腳手架,你可以按如下做你的屬性不是可供選擇:

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

[ScaffoldColumn(false)] 
public Nullable<System.DateTime> UpdateDate { get; set; } 
+0

[ScaffoldColumn(false)]和[HiddenInput]之間的差異是什麼? – user2918732

+0

http://stackoverflow.com/questions/8085003/hiddeninputdisplayvalue-false-vs-scaffoldcolumnfalse –

+0

http://www.c-sharpcorner.com/UploadFile/54db21/scaffoldcolumnbool-value-vs-hiddeninputdisplayvalue-boo/ –

0

要隱藏通過數據註釋的UI屬性,與

[ScaffoldColumn裝飾屬性(假) ] 它們將被編輯器模板忽略。

相關問題