0

エンティティ フレームワーク 4.1 を使用した単純な asp.net mvc3 プロジェクトがあります。以前の質問をしたところ、うまくいきました - EF 4.1 で SaveChanges 関数を正しくオーバーライドする方法 date と Loggedby の値は、クラス コンストラクターで設定されました。これは Create アクションでは問題ありませんでしたが、Edit アクションを使用すると、日付と LoggedBy フィールドが変更されていることがわかりました。これは望ましくありません。また、Delete が機能しないこともわかります。これは、コンストラクターが原因であると推測しています。Date と LoggedBy の値が Create に設定され、Edit 中に変更されないようにするにはどうすればよいですか? B.

using System;
using System.Collections.Generic;
using System.Web;

public partial class tblDefectDetail
{
    public tblDefectDetail()
    {
        DateLogged = DateTime.Now;
        LoggedBy = HttpContext.Current.User.Identity.Name;
    }

    public int ID { get; set; }
    public int Project { get; set; }
    public string LoggedBy { get; set; }
    public System.DateTime DateLogged { get; set; }
    public string Issue { get; set; }

私のアクションは次のようになります。

public ActionResult Create()
        {
            ViewBag.BugLocation = new SelectList(db.tblBugLocations, "ID", "BugLocation");
            ViewBag.BugType = new SelectList(db.tblBugTypes, "ID", "BugType");
            ViewBag.BusinessUnit = new SelectList(db.tblBusinessUnits, "ID", "BU_Name");
            ViewBag.BugFoundMethod = new SelectList(db.tblDefectDiscoveryMethods, "ID", "DiscoveryMethod");
            ViewBag.Project = new SelectList(db.tblProjects, "ID", "ProjectName");
            ViewBag.Language = new SelectList(db.tblLanguages, "ID", "Language");
            return View();
        }
4

1 に答える 1

1

コンストラクターで値を設定する代わりに、アクション メソッドで値を設定します。したがって、モデルをビューに渡す前に、Create アクション メソッドで必要な値を設定します。

public ActionResult Create() {
    var model = new tblDefectDetail() { LoggedBy = User.Identity.Name, DateLogged = DateTime.Now }

    return View(model);
}
于 2012-05-15T17:06:24.580 に答える