2

看法:

 @using (Html.BeginForm("Edit","program","",FormMethod.Post,new {enctype = "multipart/form-data"}))
 {

   <div class="upload">

     <input type="file" name="files" id="EpExpert"/>
     <input type="file" name="files" id="EpNewbie"/>
     <input type="submit" name="submit" value="submit" id="submit"/>
   </div>

 }

控制器:

[HttpPost]

public ActionResult Edit(tr_program program, IEnumerable<HttpPostedFileBase> files)
{
  foreach (var file in files)
  {
            if (file != null)
    {
      //string extension = Path.GetExtension(file.FileName);
      string path = AppDomain.CurrentDomain.BaseDirectory + "Documents/Program-PDFs/";
      string filename = Path.GetFileName(file.FileName);
      file.SaveAs(Path.Combine(path, filename));
    }
  }
}

上传的文件名应该在 file-{id}.pdf

例如:文件-EpNewbie.pdf

file-EpExpert.pdf

请帮忙!!

4

2 回答 2

2

id永远不会发送到服务器。您可以改用该name属性:

@using (Html.BeginForm("Edit", "program", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div class="upload">
        <input type="file" name="EpExpert" />
        <input type="file" name="EpNewbie" />
        <input type="submit" name="submit" value="submit" id="submit"/>
    </div>
}

并在您的控制器操作中:

[HttpPost]
public ActionResult Edit(tr_program program)
{
    string location = Server.MapPath("~/Documents/Program-PDFs");
    foreach (string name in Request.Files)
    {
        HttpPostedFileBase file = Request.Files[name];
        string filename = string.Format("file-{0}.pdf", name);
        filename = Path.Combine(location, filename);
        file.SaveAs(filename);
    }

    ...
}

显然,由于您将所有文件存储在同一个位置 ( ~/Documents/Program-PDFs) 并具有相同的名称 (file-EpExpert.pdffile-EpNewbie.pdf),如果 2 个用户同时上传不同的文件,它们可能会被覆盖。您的设计和命名约定似乎存在问题,但在我的回答中,我说明了如何将文件输入的名称传递给可用于构建结果文件名的控制器操作。现在由您在构建实际应用程序时考虑这一点。

于 2013-07-27T13:53:49.787 回答
0

你可以从这里得到一个想法。首先声明iddata-id动态。例如

id = '@model.Id'   data-id = '@model.Id'

在提交表单之前,使用 js 或 jquery 获取 id 值,然后发布表单。

$("#myForm").submit(function () {
        var idValue = $(this).attr('data-id');
        document.getElementById('yourHiddenValue').value = idValue;
});
于 2013-07-27T17:16:19.950 回答