0

MVC アプリケーションに取り組んでおり、データベース接続に Entity Framework 4.0 を使用しています。レコードの編集中に、テーブルのいくつかのフィールドを更新したいと考えています。編集用のコードは

   [HttpPost]
    public ActionResult Edit(ProjectActivityDetail projectactivitydetail, FormCollection formcollection)
    {
        if (ModelState.IsValid)
        {
            string value = Request["ChkIntBool"];
            if (value.Substring(0, 4) == "true") { projectactivitydetail.IsApproved = 1; } else { projectactivitydetail.IsApproved = 0; }
            projectactivitydetail.ProjectActivityDID = long.Parse(Session["ProjectActivityDID"].ToString());
            projectactivitydetail.UpatedBy = long.Parse(Session["UserID"].ToString());
            projectactivitydetail.UpdatedON = System.DateTime.Now;
            db.Entry(projectactivitydetail).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.FK_ProjectActivityID = new SelectList(db.ProjectActivityMasters, "ProjectActivityID", "ActivityName", projectactivitydetail.FK_ProjectActivityID);
        return View(projectactivitydetail);
    }

これらのフィールドを更新したいだけですが、これが実行されたときに他のフィールドが null に更新された場合、これらの値をそのまま保持し、データベーステーブルでこれらの多くの値を更新する方法はありますか?助けてください

4

2 に答える 2

0

サービス コールに渡されるエンティティが完全ではないようです。私のアドバイスは、渡されたエンティティを添付するのではなく、既存のエンティティを見つけてそれに変更を加えることです。

[HttpPost]
public ActionResult Edit(ProjectActivityDetail projectactivitydetail, FormCollection formcollection)
{
    if (ModelState.IsValid)
    {
        //I'm assuming the PK of the entity is id so adjust for that
        var entity = db.Set<ProjectActivityDetail>().Find(projectactivitydetail.id);
        string value = Request["ChkIntBool"];
        entity.IsApproved = value.Substring(0, 4) == "true" ? 1 : 0;
        entity.ProjectActivityDID = long.Parse(Session["ProjectActivityDID"].ToString());
        entity.UpatedBy = long.Parse(Session["UserID"].ToString());
        entity.UpdatedON = System.DateTime.Now;
        db.Entry(entity).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    ViewBag.FK_ProjectActivityID = new SelectList(db.ProjectActivityMasters, "ProjectActivityID", "ActivityName", projectactivitydetail.FK_ProjectActivityID);
    return View(projectactivitydetail);
}
于 2013-04-11T13:55:00.373 に答える
0

はい、方法があります。モデルに永続化したいデータを含む非表示フィールドをビューに追加します。この場合は、モデル バインディング ステージでProjectActivityDetailプロパティが変数にバインドされます。projectactivitydetail

CreatedOnビューに追加する null に設定されているというプロパティがあるとします。

@Html.HiddenFor(model => model.CreatedOn)

次に、フォームを送信すると、元の値CreatedOnがプロパティにバインドされ、projectactivitydetailモデルが正常に保存されます。モデル バインディングでフィールドの値が見つからないため、フィールドが null に更新されています。

幸運を。

于 2013-04-11T13:58:37.813 に答える