【问题标题】:Set httppostedfilebase if validation fails in ASP.Net MVC view如果在 ASP.Net MVC 视图中验证失败,则设置 httppostedfilebase
【发布时间】:2015-04-17 13:07:13
【问题描述】:

这是我的问题。我已经在我的应用程序中实现了图像的上传和下载。我遇到的问题是在出现验证错误时发回服务器。发生这种情况时,控制器重定向回页面并显示所有错误,但 HttpPostedFileBase 对象为空!所以我必须显示“无图像”图片并强制用户重新上传图像。我想要的是将图像加载回 HttpPostedFileBase 以便可以再次使用它而无需两次上传任何内容!所有其他文本值都重新显示在页面上,为什么图像不能这样做? 这可能与后面的代码有关还是我必须做一些 javascript/ajax 类型的东西?有点像 javascript/ajax 的新手,因此我们将不胜感激。

这是我的控制器。如果验证失败,我将重新显示视图并显示错误,并尝试将 HttpPostedFileBase 设置回返回的 HttpPostedFileWrapper,但当我第二次回发时它不起作用,该对象为空。因此,如果我重新提交表单,图像仍然是空的。

[HttpPost]
    public ActionResult Edit(EditStudentViewModel studentViewModel)
    {
        if (ModelState.IsValid)
        {
            //do stuff here
        } else
        {
            var years = Enumerable.Range(DateTime.Now.Year - 99, 100).Reverse();
            studentViewModel.Years = years.Select(c => new SelectListItem
            {
                Text = c.ToString(),
                Value = c.ToString(),
                Selected = (c == studentViewModel.SelectedYearId)
            });
            studentViewModel.StudentImageResult =
                new FileContentResult(
                    System.IO.File.ReadAllBytes(
                        System.IO.Path.GetFullPath(Server.MapPath("~/App_Data/Images/no_image.jpg"))),
                    "image/jpeg");
            // I thought I could reset the httppostedfilewrapper here but it doesn't work
            studentViewModel.HttpPostedFileBase= studentViewModel.StudentImageFileBase;
            return View(studentViewModel);
        }
    }

【问题讨论】:

    标签: javascript ajax asp.net-mvc image-uploading


    【解决方案1】:

    你不能。
    因为您无法在 HTML 或 JavaScript 中设置文件上传的值。
    如果可以,那将是一个严重的安全漏洞,因为理论上你可以恶意上传整个硬盘驱动器。

    但是,您可以在发送之前在 JavaScript 中进行验证。 那么您就不需要 Post-Back,这对用户来说更加友好。

    否则,如果验证失败,您可以保存文件,并在标签中显示名称,并在隐藏的输入字段中显示图像的 id/uid。

    【讨论】:

      【解决方案2】:

      如果验证失败,为什么不将文件本地存储在服务器上的临时位置并使用显示图像回来

      @Html.Image("Name", Url.Content("~/Images/TempLocation/temp.jpg"), "Picture")
      

      重新发布时,如果模型有效,您可以将临时位置的“temp.jpg”保存到您的应用程序中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-13
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多