ASP.NET MVC 4 アプリケーションを開発しているときに、保存したイメージを更新する際に問題が発生しました。基本的に、ユーザーが編集タブを選択すると、以前に入力したコンテンツにリダイレクトされます。そのようなコンテンツのアイテムの 1 つに画像があり、編集メニューで既存の画像を置き換えることを選択できます。他のコンテンツは正しく更新されていますが、画像は同じままです。「編集」ActionResult にブレークポイントを配置すると、渡されたモデルの画像値が null として表示されますか? newsArticle.ArticleImage = Null
参考までに - イメージはバイト配列として保存されます。
何か不足していますか?
コントローラ....
[HttpPost]
public ActionResult Edit(NewsArticle newsArticle, int id, HttpPostedFileBase Article)
{
try
{
if (ModelState.IsValid)
{
NewsArticle savedArticle= _newsArticle.Get(id);
savedArticle.Body = newsArticle.Body;
savedArticle.Title = newsArticle.Title;
if (newsArticle.ArticleImage == null)
{
newsArticle.ArticleImage = savedArticle.ArticleImage;
}
else
{
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
newsArticle.ArticleImage = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}
savedArticle.ArticleImage = newsArticle.ArticleImage;
}
if (newsArticle.ImageName == null)
{
newsArticle.ImageName = savedArticle.ImageName;
}
else
{
string imgeName = Path.GetFileName(Article.FileName);
savedArticle.ImageName = imgeName;
}
_uow.SaveChanges();
return RedirectToAction("Index");
}
}
catch (System.Data.DataException)
{
//Log th error(add a variable name after DataExpection)
ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
}
return View(newsArticle);
}
意見..........
@using (Html.BeginForm("Edit", "Admin", FormMethod.Post, new { enctype = "multipart/form-data", @class = "form-horizontal", id = "newsEditForm" }))
{
@Html.ValidationSummary()
@Html.HiddenFor(model => model.ID)
<div class="control-group">
<label class="control-label">Posted on :</label>
<div class="controls">
<span class="text">@Model.DateCreated.Value.ToShortDateString()</span>
@*@Html.LabelFor(n => n.DateCreated)*@
</div>
</div>
<div class="control-group">
<label class="control-label">@Html.LabelFor(n => n.Title)</label>
<div class="controls">
@Html.TextBoxFor(n => n.Title, new { @class = "span4 m-wrap", rows = 1 })
</div>
</div>
<div class="control-group">
<label class="control-label">@Html.LabelFor(n => n.Body)</label>
<div class="controls">
@Html.TextAreaFor(n => n.Body, new { @class = "span12 ckeditor m-wrap", rows = 4 })
</div>
</div>
<div class="control-group">
<label class="controls">@Html.DisplayTextFor(model => model.ImageName)</label>
<div class="span4 blog-img blog-tag-data">
<div class="editor-field">
<input type="file" name="Article" id="ArticleImage" />
</div>
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn green" id="submitnews"><i class="icon-ok"></i>Submit</button>
@Html.ActionLink("Cancel", "ArticleList", "Admin", null, new { @class = "btn blue" })
@*<button type="button" class="btn blue" onclick="location.href='ArticleList','Admin'">Cancel</button>*@
</div>
}