2015-01-04 39 views
0

我想知道如何從下面的類定義視圖模型。如何從現有模型定義視圖模型

public class TestModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool HasCompleted { get; set; } 
    public DateTime DeadLine { get; set; } 
    public DateTime? CreatedDate { get; set; } 
    public DateTime? LastModified { get; set; } 
} 

從上面的模型中,只有Id,Name,HasCompleted和Deadline字段會顯示給用戶。否則,字段CreatedDate和LastModified字段將在內部處理。

最初將使用所有上述字段創建數據庫表。但是,如前所述,爲了避免過度發佈攻擊,我創建了一個包含所有必填字段的視圖模型。現在,結構看起來如下。

public class TestModel 
{ 
    public TestVM testVM { get; set; } 
    public DateTime? CreatedDate { get; set; } 
    public DateTime? LastModified { get; set; } 
} 
public class TestVM 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool HasCompleted { get; set; } 
    public DateTime DeadLine { get; set; } 
} 

如果仍想保持單個數據庫表,使CRUD操作。但是,我在下面的行動中有一個障礙。

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(TestVM item) 
    {    
     //Once the values are bound to TestVM. How do I get the instance of the TestModel to update the LastModified property here?? 
    } 

有人能請指教嗎?

問候, 拉姆從TestModel類

+0

可能有人請告知呢?它非常緊迫.. –

回答

0

刪除TestViewModel。

public class TestModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool HasCompleted { get; set; } 
    public DateTime DeadLine { get; set; } 
    public DateTime? CreatedDate { get; set; } 
    public DateTime? LastModified { get; set; } 
} 

public class TestViewModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool HasCompleted { get; set; } 
    public DateTime DeadLine { get; set; } 
} 

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit(TestViewModel item) 
{    
    var testModel = new TestModel 
    { 
     Name = item.Name, 
     HasCompleted = item.HasCompleted, 
     DeadLine = item.DeadLine 
    }; 

    //testModel.CreateDate = DateTime.Now; 
} 

您還可以使用Bind Attribute爲防止綁定CreatedDateLastModified領域:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit([Bind(Exclude("CreatedDate", "LastModified"))]TestModel item) 
{    
}