我有一个模型类,
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);
}
答案 0 :(得分: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获取现有对象,更新它,然后提交更改,从而仅更新您关注的属性,并将其余部分保留原样。
答案 1 :(得分:0)
制作具有A和B属性的视图模型。
public class ViewModel
{
public int A {get;set;}
public int B {get;set;}
}
然后将其作为控制器中的参数,然后将其映射到模型类。
答案 2 :(得分: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);
}