查看:
@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
中例如:file-EpNewbie.pdf
file-EpExpert.pdf
请帮助!!
答案 0 :(得分: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.pdf
和file-EpNewbie.pdf
),则两个用户同时上传不同的文件可能会被覆盖。您的设计和命名约定似乎有问题,但在我的回答中,我说明了如何将文件输入的名称传递给控制器操作,该操作可用于构建生成的文件名。现在,您需要在构建实际应用程序时考虑到这一点。
答案 1 :(得分:0)
你可以从这里了解一下。首先声明id
和data-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;
});