【问题标题】:Using TempData in Upload Files in ASP.NET MVC在 ASP.NET MVC 中的上传文件中使用 TempData
【发布时间】:2021-08-20 20:36:12
【问题描述】:

我已经实现了在我的项目MVC asp net c#中上传文件的表单

我的问题:

如果我尝试上传文件而不是图像(jpg、gif、png),例如一个txt文件在弹出窗口中的返回是

Please upload only image (jpg,gif,png)

但数据表单已清空已存储的其他数据。

不可能警告用户只接受图像文件并保留已存储在表单中的数据?

如何解决这个问题?

下面是我的代码

控制器

[HttpPost]
public ActionResult Index(PersonModel person, HttpPostedFileBase file)
{
    if (file != null && file.ContentLength > 0)
    {
        var fileName = System.IO.Path.GetFileNameWithoutExtension(file.FileName);
        var fileExtension = System.IO.Path.GetExtension(file.FileName);

        if (fileExtension.ToString() == ".jpeg" ||
                    fileExtension.ToString() == ".jpg" ||
                    fileExtension.ToString() == ".gif" ||
                    fileExtension.ToString() == ".png")
        {
            fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + fileName.Trim() + fileExtension;
            var userfolderpath = System.IO.Path.Combine(Server.MapPath("~/UploadedFiles/"), fileName);
            file.SaveAs(userfolderpath);                    
            TempData["Message"] = "Ok";
            return RedirectToAction("Index");
        }
        else
        {
            TempData["Message"] = "Please upload only image (jpg,gif,png)";
        }
    }
}

查看

@if (TempData["Message"] != null)
{
    <script type="text/javascript">
                window.onload = function () {
                    alert("@TempData["Message"].ToString()");
        };
    </script>
}

【问题讨论】:

    标签: c# asp.net-mvc upload tempdata


    【解决方案1】:

    发生的情况是,在您向控制器发送 POST 后,会呈现一个新页面,其中不包括原始上传文件选择。

    处理此问题的最简单方法是使用一些简单的 Javascript 检查客户端上的文件名,并仅在其有效时提交表单。

    var fullPath = document.getElementById('upload').value;
    if (fullPath) {
        var startIndex = (fullPath.indexOf('\\') >= 0 ? fullPath.lastIndexOf('\\') : 
        fullPath.lastIndexOf('/'));
        var filename = fullPath.substring(startIndex);
        if (filename.indexOf('\\') === 0 || filename.indexOf('/') === 0) {
        filename = filename.substring(1);
    }
        // Check the filename here and then submit the form if valid
        if (!filename.includes(".jpg") && !filename.includes(".gif"))
        {
             // display error
        }
        else
        {
            document.getElementById("myForm").submit();
        }
    }
    

    【讨论】:

    • 或使用 fetch api 发布表单/文件并在成功时重定向。
    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2012-09-07
    • 2010-12-02
    • 1970-01-01
    相关资源
    最近更新 更多