我想知道如何从类下面定义viewmodel。
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??
}
有人可以提出建议吗?
此致 拉姆
答案 0 :(得分:0)
从TestModel类中删除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来阻止绑定CreatedDate
和LastModified
字段:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Exclude("CreatedDate", "LastModified"))]TestModel item)
{
}