0

私はモデルクラスを持っています、

public class MyModel 
{ 
    public int A { get; set; }
    public int B { get; set; }
    public int C { get; set; }
    public DateTime D { get; set; }
}

編集画面では、`A と B だけを編集する必要があります。次の例では、C と D をデフォルト値 (0 と '0001-01-01') で上書きします。 C と D に加えて、それらをビューに含めて非表示にしますか?

[HttpPost]
public ActionResult Edit(MyModel myModel)
{
    if (ModelState.IsValid)
    {
        _db_Entry(myModel).State = EntityState.Modified;
        _db.SaveChanges();
    }
    return View(myModel);
}
4

3 に答える 3

1

モデルが実際にどのように見えるかはわかりませんが、コントローラーでは通常、次のようにします。

[HttpPost]
public ActionResult Edit(MyModel myModel)
{
    if (ModelState.IsValid)
    {
        var existEntry = _db.YourEntity.firstOrDefault(o => A == o.A);
        if(existEntry != null){
          existEntry.A = myModel.A;
          existEntry.B = myModel.B;
          _db.SaveChanges();
        }        
    }
    return View(myModel);
}

もちろん、これは既存のエントリを取得するためのモデルの詳細に実際に依存します。おそらく、この方法が気に入らない場合は、他の回答がニーズにより適している可能性があります。

編集:基本的に、私が通常これを処理する方法は、dbから既存のオブジェクトを取得し、それを更新してから変更を送信することです。これにより、関心のあるプロパティのみが更新され、残りはそのままになります。

于 2013-03-03T03:46:12.927 に答える
0

A プロパティと B プロパティを持つビュー モデルを作成します。

public class ViewModel 
{
  public int A {get;set;}
  public int B {get;set;}
}

次に、これをコントローラーのパラメーターとして作成し、モデル クラスにマップします。

于 2013-03-03T03:22:22.787 に答える
0

UpdateModel (またはTryUpdateModel )を使用できます。既存のエンティティを更新しますが、値プロバイダーで見つけることができるプロパティに対してのみです。他のプロパティはそのまま残ります。

通常、次のように使用します。

[HttpPost]
public ActionResult Edit(int id, TModel model, string returnUrl)
{
    // Invalid model; redisplay view
    if (!ModelState.IsValid) return View();

    var entity = db.Entity.Find(id);

    // Entity not found; return 404
    if (entity == null) return HttpNotFound();

    // Everything OK; update entity and redirect back
    UpdateModel(entity);
    db.SaveChanges();
    return Redirect(returnUrl);
}
于 2013-03-03T09:39:31.313 に答える