所以我在这里有我的UpdateMethod:
public void gvProducts_UpdateItem(Int32 ProductID)
{
ProductListModel model = new ProductListModel();
Product product = db.Products.Find(ProductID);
if (product == null)
{
// MAF: The item wasn't found
ModelState.AddModelError("", String.Format("Item with id {0} was not found", ProductID));
return;
}
TryUpdateModel(model);
if (ModelState.IsValid)
{
Mapper.Map(model, product);
db.SaveChanges();
gvProducts.EditIndex = -1;
}
}
使用AutoMapper将ProductList页面的Model映射到Product Entity。 GridView上有很多列,因此我们会根据用户选择显示和隐藏一些列。 我遇到的问题是绑定到Visible =" false"在TryUpdateModel()期间未设置列,因此填充了默认值。这意味着,例如,如果用户没有显示价格详细信息,则他们的价格会在保存时设置为0.
答案 0 :(得分:0)
事实证明,如果数据库的成本稍高,那么解决方案实际上非常简单。
我们从当前数据库值中获取重新映射模型所需的相关实体,一旦我们从当前数据库值获得模型,我们就可以在该模型上执行更新,这将使Visible =" false& #34;列数与DB值不变。
然后,我们将模型映射回实体,并将其保留为之前的数据库。
public void gvProducts_UpdateItem(Int32 ProductID)
{
Product product = db.Products
.Include(it => it.TaxRate)
.Include(it => it.Category)
.Include(it => it.Brand)
.Include(it => it.Supplier)
.Include(it => it.Colour)
.FirstOrDefault(it => it.ProductID == ProductID);
if (product == null)
{
ModelState.AddModelError("", String.Format("Item with id {0} was not found", ProductID));
return;
}
ProductListModel model = Mapper.Map<ProductListModel>(product);
TryUpdateModel(model);
if (ModelState.IsValid)
{
Mapper.Map(model, product);
db.SaveChanges();
gvProducts.EditIndex = -1;
}
}
希望这有助于其他人。