![](/img/trans.png)
[英]dynamically Hide or visible false gridview Auto generated columns in asp.net in code behind?
[英]TryUpdateModel ignoring properties in Visible=“false” columns of GridView
所以我在这里有我的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上有很多列,因此我们根据用户选择显示和隐藏一些列。 我遇到的问题是在TryUpdateModel()期间未设置任何绑定到Visible =“ false”列的属性,因此使用默认值进行填充。 这意味着,例如,如果用户看不到价格明细,则保存时其价格将设置为0。
因此,事实证明,该解决方案实际上非常简单,即使对于数据库而言稍微贵一些。
我们从当前数据库值中获取重新映射模型所需的相关实体,一旦我们从当前数据库值中获取了模型,便可以对该模型执行更新,这将使Visible =“ false”列与数据库保持不变值。
然后,我们将模型映射回实体,并按照之前的方法将其持久化回数据库。
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;
}
}
希望这对其他人有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.