0

两天来,我一直在谷歌上寻找解决问题的方法,但没有任何运气。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);
            }
        }
4

1 回答 1

0

问题可能是HTML中文件输入字段的名称是imgeFile,而MVC中文件参数的名称是imageFile。确保输入字段名称和操作方法参数名称匹配。

于 2012-07-20T00:39:55.750 回答