私はPro ASP.NET MVC 3 Framework by Apressを読んでいます。私は画像のアップロードと表示の例に従っています。問題は、画像を製品にアップロードするときに問題なく動作しますが、後でたとえば説明を編集してから製品を保存する場合は、画像が消えることです。問題は、画像のアップロードが空で、context.SaveChanges()が空の画像データフィールドを含むすべてのデータフィールドを保存するため、画像データを渡していないということです。mvc 3で成功した画像アップロードがあっても、画像を編集するときに消え去る
私は立ち往生しています。誰かが私を助けることができたら本当に感謝します!
これは、編集ページの一部です:
<label>Image</label>
if (Model.ImageData == null)
{
@:Null
}
else
{
<img id="imageFile" runat="server" src="@Url.Action("GetImage", "Product", new { Model.Name })" />
}
<label>Upload image:</label>
<input type="file" name="Image" runat="server" />
更新する場合:
public ActionResult Edit(Product product, HttpPostedFileBase image)
{
if (ModelState.IsValid)
{
if (image != null && image.ContentLength > 0)
{
product.ImageMimeType = image.ContentType;
product.ImageData = new byte[image.ContentLength];
image.InputStream.Read(product.ImageData, 0, image.ContentLength);
}
repository.SaveProduct(product);
TempData["message"] = string.Format("{0} har sparats", product.Name);
return RedirectToAction("Index");
}
else
{
return View(product);
}
}
省製品:
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
}
else
{
context.Entry(product).State = EntityState.Modified;
}
int result = context.SaveChanges();
}
保存したいかどうかの確認はどうですか? –
私はそれを行うことができました、問題は、私はいくつかのデータフィールドを更新するだけでいくつかのデータフィールドを残す方法を知らないということです。私はデータ行全体を更新する方法しか知りません。私はまた、成功していない行を更新する前に、現在の製品の行から既存のイメージデータフィールドを読み込もうとしました... – Martin