Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果在ASP.Net MVC视图中验证失败,请设置httppostedfilebase_Javascript_Ajax_Asp.net Mvc_Image Uploading - Fatal编程技术网

Javascript 如果在ASP.Net MVC视图中验证失败,请设置httppostedfilebase

Javascript 如果在ASP.Net MVC视图中验证失败,请设置httppostedfilebase,javascript,ajax,asp.net-mvc,image-uploading,Javascript,Ajax,Asp.net Mvc,Image Uploading,这是我的问题。我已经在我的应用程序中实现了图像的上传和下载。我遇到的问题是在出现验证错误时发回服务器。发生这种情况时,控制器重定向回页面并显示所有错误,但HttpPostedFileBase对象为空!因此,我必须显示一张没有图像的图片,并强制用户重新上传图像。我想要的是将图像加载回HttpPostedFileBase,这样它就可以再次使用,而无需上传任何内容两次!所有其他文本值都会在页面上重新显示,为什么图像不能这样做? 这可能是代码隐藏还是我必须做一些javascript/ajax类型的事情?

这是我的问题。我已经在我的应用程序中实现了图像的上传和下载。我遇到的问题是在出现验证错误时发回服务器。发生这种情况时,控制器重定向回页面并显示所有错误,但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);
        }
    }
你不能。 因为不能用HTML或JavaScript设置文件上载的值。 如果可以的话,这将是一个严重的安全漏洞,因为从理论上讲,你可以恶意上传整个硬盘

但是,您可以在发送之前使用JavaScript进行验证。 那么你就不需要回复帖子了,反正这对用户来说要友好得多


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

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

@Html.Image("Name", Url.Content("~/Images/TempLocation/temp.jpg"), "Picture")
在重新发布时,如果模型有效,您可以将temp.jpg从临时位置保存到应用程序中