我有一个场景,我有一个图像属性,它是产品实体的一部分。
当允许用户通过 MVC3 屏幕编辑此产品时,图像属性显示如下:
<div class="editor-label">Image</div>
<div class="editor-field">
@if (Model.ProductItem.ImageData == null)
{
@:None
}
else
{
<img alt="Product Image" width="125" height="125"
src="@Url.Action("GetImage", "Product", new { Model.ProductItem.ProductId })" />
}
</div>
<div>Upload new image: <input type="file" name="Image" /></div>
要编辑当前图像,用户实际上是通过上传选择一个新图像。这意味着当前 ImageData 属性为 null,模型状态无效。新图像在帖子中已过去,因此我将其设置为 ImageData 属性并清除模型验证错误。
然后我通过 context.savechanges() 方法保存“更改”,但是上下文认为此特定实体没有任何更改。为了解决这个问题,我在编辑时做了以下操作:
if (context.Products.Local.Count() == 0)
{
Product procurr = context.Products
.Where(p => p.ProductId == product.ProductId)
.FirstOrDefault();
context.Entry(procurr).CurrentValues.SetValues(product);
}
本质上,我强制更新我想要更新的产品列表中的项目(procurr 是列表中的项目,产品是我要保存的新编辑值)
我的问题是(A)这是使用上下文的最佳方法吗,以及(B)在 UI 中是否有更好的方法来做到这一点,即以某种方式将新旧图像捆绑在一起,以便模型自动获取更改?
谢谢