Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
Asp.net mvc 上传多张图片+;ASP.NET MVC中的文本字段_Asp.net Mvc_File Upload - Fatal编程技术网

Asp.net mvc 上传多张图片+;ASP.NET MVC中的文本字段

Asp.net mvc 上传多张图片+;ASP.NET MVC中的文本字段,asp.net-mvc,file-upload,Asp.net Mvc,File Upload,我对ASP.net MVC非常陌生,因此请在回答中尽可能描述:) 让我简化一下我要做的事情。假设我有一个表单,您想在其中输入一些关于汽车的信息。字段可能是:Make、Model、Year、Image1、Image2 表单底部有一个“保存”按钮。关联的控制器方法将Image1和Image2保存到磁盘,获取它们的文件名并将它们与汽车模型关联,然后将其保存到数据库中 有什么想法吗 谢谢大家 编辑 让我一路走到那里。唯一未解决的问题是:Image1和Image2不是必填字段,因此我现在可以保存0、1或2

我对ASP.net MVC非常陌生,因此请在回答中尽可能描述:)

让我简化一下我要做的事情。假设我有一个表单,您想在其中输入一些关于汽车的信息。字段可能是:Make、Model、Year、Image1、Image2

表单底部有一个“保存”按钮。关联的控制器方法将Image1和Image2保存到磁盘,获取它们的文件名并将它们与汽车模型关联,然后将其保存到数据库中

有什么想法吗

谢谢大家

编辑

让我一路走到那里。唯一未解决的问题是:Image1和Image2不是必填字段,因此我现在可以保存0、1或2个图像;但是如果用户只上传一张图片,我无法知道它是来自imageUpload1还是imageUpload2


再次感谢您的帮助

在控制器中,您可以通过以下方式访问上载的文件:

    if(Request.Files.Count > 0 && Request.Files[0].ContentLength > 0) {
        HttpPostedFileBase postFile = Request.Files.Get(0);
        string filename = GenerateUniqueFileName(postFile.FileName);
        postFile.SaveAs(server.MapPath(FileDirectoryPath + filename));
    }

protected virtual string GenerateUniqueFileName(string filename) {

    // get the extension
    string ext = Path.GetExtension(filename);
    string newFileName = "";

    // generate filename, until it's a unique filename
    bool unique = false;

    do {
        Random r = new Random();
        newFileName = Path.GetFileNameWithoutExtension(filename) + "_" + r.Next().ToString() + ext;
        unique = !File.Exists(FileDirectoryPath + newFileName);
    } while(!unique);
    return newFileName;
}
文本字段将按照通常的方式到达控制器操作,即Request.Form[…]。请注意,您还需要将表单上的enctype设置为“多部分/表单数据”。听起来您对ASP.NET MVC了解得足够多,可以完成剩下的工作。还请注意,您可以在aspx视图中声明表单标记,如下所示,但如果您愿意,可以使用更传统的方法

<% using(Html.BeginForm<FooController>(c => c.Submit(), FormMethod.Post, new { enctype = "multipart/form-data", @id = formId, @class = "submitItem" })) { %> 

<% } %>
c.Submit(),FormMethod.Post,新建{enctype=“multipart/form data”,@id=formId,@class=“submitItem”})){%>

这是我的解决方案,上面的答案对我的情况不太合适。它不关心表单细节,允许多次上传

    for (int i = (Request.Files.Count - 1); i >= 0; i--)
    {
          if (Request.Files != null && Request.Files[i].ContentLength > 0)
          {
               string path = this.Server.MapPath("~/Content/images/");
               string filename = Path.GetFileName(Request.Files[i].FileName);
               string fullpath = Path.Combine(path, filename);
               Request.Files[i].SaveAs(fullpath);
           }
     }

你让我半途而废!只有一个小问题:Image1和Image2不一定存在。那么如果用户只提供Image2而不提供Image1呢?有没有办法知道它来自哪个上载控件?而不是请求。文件[0]你应该能够使用Request.Files[“formInputname”]if(Request.Files[“formInputname”]!=null&&Request.Files[“formInputname”]。ContentLength>0)啊……我想我是个傻瓜。我在尝试表单[“formInputname”]。谢谢!