Asp.net mvc 实体框架/MVC。如何防止在更新当前记录而不选择新图像时删除保存在数据库中的图像块
以下是理解我的问题的代码: 控制器:Asp.net mvc 实体框架/MVC。如何防止在更新当前记录而不选择新图像时删除保存在数据库中的图像块,asp.net-mvc,database,image,entity-framework,blob,Asp.net Mvc,Database,Image,Entity Framework,Blob,以下是理解我的问题的代码: 控制器: [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult> Edit([Bind(Include = "Field1,Field2,ect")] ControllerName controllername, HttpPostedFileBase ImageData) { if (ModelState.IsValid) {
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "Field1,Field2,ect")] ControllerName controllername, HttpPostedFileBase ImageData)
{
if (ModelState.IsValid)
{
try
{
if (ImageData != null && ImageData.ContentLength > 0)
{
using (var reader = new System.IO.BinaryReader(ImageData.InputStream))
{
controllername.ImageBLOB_FieldDB = reader.ReadBytes(ImageData.ContentLength); //imageUrl è un tipo varbinary
}
}
else
{
ImageData = controllername.ImageBLOB_FieldDB;
}
db.Entry(controllername).State = EntityState.Modified;
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}",
validationError.PropertyName,
validationError.ErrorMessage);
}
}
}
}
return View(controllername);
}
<div class="form-group">
@Html.LabelFor(model => model.ImageBLOB_FieldDB, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-3">
<label class="col-md-3">Current Image</label>
@if (Model.ImageBLOB_FieldDB!= null)
{
<img style="height:auto; max-width:200px; width:100%; float: left !important; text-align: left !important; "
src='@Url.Action("GetImage", "controllername", new { id = Model.Id })' />
}
</div>
<div class="col-md-3">
<div id="imageNew" class="hidden">
<label class="col-md-3">New Image</label>
<div class="col-md-3">
<div id="osp">
<div id="imagePreview"></div><br>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<input type="file" id="ImageData" name="ImageData" onchange="fileCheck(this);" />
</div>
</div>
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务编辑([Bind(Include=“Field1,Field2,ect”)]ControllerName ControllerName,HttpPostedFileBase ImageData)
{
if(ModelState.IsValid)
{
尝试
{
如果(ImageData!=null&&ImageData.ContentLength>0)
{
使用(var reader=new System.IO.BinaryReader(ImageData.InputStream))
{
controllername.ImageBLOB_FieldDB=reader.ReadBytes(ImageData.ContentLength);//imageUrlèun tipo varbinary
}
}
其他的
{
ImageData=controllername.ImageBLOB_FieldDB;
}
db.Entry(controllername).State=EntityState.Modified;
等待db.saveChangesSync();
返回操作(“索引”);
}
catch(DbEntityValidationException dbEx)
{
foreach(dbEx.EntityValidationErrors中的var validationErrors)
{
foreach(validationErrors.validationErrors中的var validationError)
{
Trace.TraceInformation(“属性:{0}错误:{1}”,
validationError.PropertyName,
validationError.ErrorMessage);
}
}
}
}
返回视图(controllername);
}
查看:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "Field1,Field2,ect")] ControllerName controllername, HttpPostedFileBase ImageData)
{
if (ModelState.IsValid)
{
try
{
if (ImageData != null && ImageData.ContentLength > 0)
{
using (var reader = new System.IO.BinaryReader(ImageData.InputStream))
{
controllername.ImageBLOB_FieldDB = reader.ReadBytes(ImageData.ContentLength); //imageUrl è un tipo varbinary
}
}
else
{
ImageData = controllername.ImageBLOB_FieldDB;
}
db.Entry(controllername).State = EntityState.Modified;
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}",
validationError.PropertyName,
validationError.ErrorMessage);
}
}
}
}
return View(controllername);
}
<div class="form-group">
@Html.LabelFor(model => model.ImageBLOB_FieldDB, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-3">
<label class="col-md-3">Current Image</label>
@if (Model.ImageBLOB_FieldDB!= null)
{
<img style="height:auto; max-width:200px; width:100%; float: left !important; text-align: left !important; "
src='@Url.Action("GetImage", "controllername", new { id = Model.Id })' />
}
</div>
<div class="col-md-3">
<div id="imageNew" class="hidden">
<label class="col-md-3">New Image</label>
<div class="col-md-3">
<div id="osp">
<div id="imagePreview"></div><br>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<input type="file" id="ImageData" name="ImageData" onchange="fileCheck(this);" />
</div>
</div>
@LabelFor(model=>model.ImageBLOB_FieldDB,htmlAttributes:new{@class=“controllabel col-md-2”})
当前图像
@if(Model.ImageBLOB_FieldDB!=null)
{
}
新形象
当我保存且未选择新图像时,先前保存的图像将被删除。你知道吗?提前谢谢你
在实践中,我不能“保持”在以前的情况下摄入变化。。。我认为这是因为输入的“ImageData”没有初始化,它消除了上一年的数据。我在视图中简单地通过以下代码行解决:
@Html.HiddenFor(model => model.ImageBLOB_FieldDB);