1

我是 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);
}

我的问题是试图弄清楚当我创建或编辑记录并将值保存在我的数据库中时如何在我的控制器中设置这些默认值。现在上面的代码不起作用,因为我没有正确执行(对象引用未设置为对象的实例。)

4

1 回答 1

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,然后保存 vod。

于 2012-05-25T00:46:56.843 回答