我是MVC3的新手,遇到了一个小问题。我已经浏览了互联网,并涵盖了复杂的模型绑定等主题无济于事。如果这是一个简单的问题, 我提前道歉。
这是我的课程的样子:
public class Vod
{
public virtual int id {get; set;}
public virtual string myname {get; set;}
public virtual Metadata Metadata {get; set;}
}
public class Metadata
{
public System.Datetime? dtmCreationDate {get; set;}
public string strCreatedBy {get; set;}
public string strModifiedBy {get; set;}
public System.Datetime? dtmModifiedDate {get; set;}
}
这是我编辑控制器的一个示例:
[HttpPost]
public ActionResult Edit(Vod vod)
{
if (ModelState.IsValid)
{
db.Entry(vod).State = EntityState.Modified;
vod.Metadata.strModifiedBy = "modified";
vod.Metadata.dtmLastModified = DateTime.Now;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(vod);
}
我的问题是试图弄清楚当我创建或编辑记录并将值保存在我的数据库中时如何在我的控制器中设置这些默认值。现在上面的代码不起作用,因为我没有正确地执行它(对象引用没有设置为对象的实例。)
答案 0 :(得分:1)
如果没有看到你的观点,我无法准确说明为什么它没有约束力。也就是说,不要将您的域模型(vod)绑定到您的操作。使用包含所需vod属性的视图模型。
public class VodViewModel
{
public int id { get; set; }
public string myname { get; set; }
//any properties of Metadata you need.
}
public ActionResult Edit(VodViewModel model)
现在,您可以从数据库中获取具有相应ID的vod(如果不存在,则使用正确的默认值创建新实例)。然后根据视图模型中的属性修改您的vod,然后保存视频。