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 に答える