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。下面将用默认值(0和'0001-01-01'覆盖C和D。如何保留现有值(在数据库表中) 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);
}

当然,这实际上取决于您获取现有条目的模型细节,也许您不喜欢这种方法,在这种情况下,其他答案可能更适合您的需求。

编辑:基本上,我通常处理此问题的方式是从数据库中获取现有对象,对其进行更新,然后提交更改,从而仅更新您关心的属性,其余的保持原样。

于 2013-03-03T03:46:12.927 回答
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 回答
0

创建一个具有 A 和 B 属性的视图模型。

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

然后将此作为您的控制器中的参数,然后将其映射到您的模型类。

于 2013-03-03T03:22:22.787 回答