如何从现有模型定义视图模型
How to define View Model from existing Model
我想知道如何从下面定义视图模型 class。
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 字段将在内部处理。
最初将使用上述所有字段创建数据库 table。但是,如前所述,为了避免过度发布攻击,我创建了一个包含所有必填字段的视图模型。现在,结构如下所示。
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; }
}
如果仍想维护单个数据库table并进行 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 中删除 TestViewModel class。
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)
{
}
我想知道如何从下面定义视图模型 class。
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 字段将在内部处理。
最初将使用上述所有字段创建数据库 table。但是,如前所述,为了避免过度发布攻击,我创建了一个包含所有必填字段的视图模型。现在,结构如下所示。
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; }
}
如果仍想维护单个数据库table并进行 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 中删除 TestViewModel class。
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)
{
}