Я никогда не использовал этот метод раньше, и это не прямой ответ, но, возможно, это лучшее решение:
// used when editing an item
public void UploadFiles(FormCollection form, NameValueCollection currentFiles, string folder, bool useTicks)
{
foreach (string file in Request.Files)
{
var hpf = Request.Files[file];
if (hpf.ContentLength == 0)
{
form[file] = currentFiles[file];
}
else
{
var filename = useTicks ? hpf.FileName
.Replace(" ", "_")
.Replace(".", RandomFileName() + ".") : hpf.FileName;
var myPath = Server.MapPath("~/Content/" + folder);
hpf.SaveAs(myPath + "/" + filename);
form[file] = filename;
}
}
if (Request.Files.Count > 0) return;
foreach (var file in currentFiles.AllKeys)
{
form[file] = currentFiles[file];
}
}
//used when creating a new item
public void UploadFiles(FormCollection form, string folder, bool useTicks)
{
foreach (string file in Request.Files)
{
var hpf = Request.Files[file];
if (hpf.ContentLength == 0)
{
form[file] = null;
}
else
{
var filename = "";
filename = useTicks ?
hpf.FileName.Replace(" ", "_").Replace(".", RandomFileName() + ".") :
hpf.FileName;
UploadFileName = filename;
var myPath = Server.MapPath("~/Content/" + folder);
hpf.SaveAs(myPath + "/" + filename);
form[file] = UploadFileName;
}
}
}
Я использую модели, поэтому в своей модели я использую UIHint ("uploadbox")
вот код внутри представлений / Shared / EditorTemplates / UploadField.cshtml
@Html.TextBox("",null,new{type="File"})
вот пример использования функции загрузки:
public ActionResult AddFiles(FormCollection form, SomeModel myModel)
{
UploadFiles(form,"products", true);
myModel.pdfFile = form["pdffile"];
myModel.thumbnail = form["thumbnail"];
вот код при редактировании элемента, если файл не был изменен, но другие элементы имеют
var existingFile = ctx2.modelname.SingleOrDefault(x => x.Id == id).Filename;
NameValueCollection myCol = new NameValueCollection();
myCol.Add("Filename", existingFile);
UploadFiles(form, myCol, "uploads/custom", true);
myModel.Filename = form["Filename"];
просто мысль: -)