两天来,我一直在谷歌上寻找解决问题的方法,但没有任何运气。MVC3 .NET 中的任何明星都可以提供帮助吗?
我正在尝试构建一个 .NET MVC3 应用程序来更新保存在数据库中的图像。
下面是动作方法
[HttpPost]
public ActionResult Edit(myImage img, HttpPostedFileBase imageFile)
{
//var img = (from imga in db.myImages
// where imga.imageID == id
// select imga).First();
if (ModelState.IsValid)
{
if (img != null)
{
img.imageType = imageFile.ContentType;
img.Data = new byte[imageFile.ContentLength];
imageFile.InputStream.Read(img.Data, 0, imageFile.ContentLength);
}
// save the product
UpdateModel(img);
db.SubmitChanges();
return RedirectToAction("Index");
}
else
{
// there is something wrong with the data values
return View(img);
}
}
这是视图
@model JackLing.Models.myImage
@{
ViewBag.Title = "Edit";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Edit</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm("Edit", "Image",FormMethod.Post, new { enctype = "multipart/form-data" })){
@Html.ValidationSummary(true)
<fieldset>
<legend>myImage</legend>
@Html.EditorForModel();
<div class="editor-label">Image</div>
<div class="editor-field">
@if (Model.Data != null)
{
<img src="@Url.Action("show", new { id = Model.imageID })" height="150" width="150" />
}
else {
@:None
}
</div>
<p>
<span>Choose a new file</span> <input type="file" name="imgFile"/>
</p>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
当我运行应用程序时,它会抛出一个错误,提示“对象引用未设置为对象的实例”。
任何有关如何解决问题的建议都将得到重视!顺便说一句,create 和 details 方法都在工作。我认为它与数据绑定有关,但我不确定......我不知道如何解决它。
最后根据 Eulerfx 的建议解决了这个问题,这里是工作操作。
[HttpPost]
public ActionResult Edit(myImage img, HttpPostedFileBase imageFile)
{
myImage imgToSave = (from imga in db.myImages
where imga.imageID == img.imageID
select imga).First();
if (ModelState.IsValid)
{
if (img != null)
{
imgToSave.imageType = imageFile.ContentType;
var binaryReader = new BinaryReader(imageFile.InputStream);
imgToSave.Data = binaryReader.ReadBytes(imageFile.ContentLength);
binaryReader.Close();
}
TryUpdateModel(imgToSave);
db.SubmitChanges();
return RedirectToAction("Index");
}
else
{
// there is something wrong with the data values
return View(img);
}
}