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