我尝试将使用文件上传控件上传的viewmodel和多个文件传递给控制器。无论files参数传递为null。
如何将上传的文件传递给控制器。
这是我的观点
@model DMS.BO.ViewModels.UploadDocumentViewModel
<div class="content-wrapper">
<form id="frmAddService" action="@Url.Action("UploadDocuments", "Home")" method="post" enctype="multipart/form-data">
@if (TempData["Message"] != null)
{
<script type="text/javascript">
window.onload = function () {
alert("@TempData["Message"]");
};
</script>
}
<div class="row">
<div class="col-sm-6">
<label class="control-label " for="CompanyName">Company Name</label>
@* <input type="text" class="form-control required tobecleared" name="CompanyName" data-val-message="Please enter company name"
placeholder="Company Name*" />*@
<select class="form-control qf-level required" name="uploadvm.hostbo.CompanyId" id="CompanyId"
data-val-message="Please select a Company">
<option value="" selected disabled>Company*</option>
@foreach (var item in Model.companies)
{
<option value="@item.CompanyId">@item.CompanyName</option>
}
</select>
</div>
<div class="col-sm-4">
<label class="control-label " for="HostName">Host Ip</label>
<input type="text" class="form-control required tobecleared" data-action="@Url.Action("GetHostName", "Home")" id="HostIp" name="uploadvm.hostbo.HostIP" data-val-message="Please enter Host IP"
placeholder="Host IP*" />
</div>
</div>
<br />
<div class="row">
<div class="col-sm-4">
<label class="control-label " for="HostName">Host Name</label>
<input type="text" class="form-control required tobecleared" name="uploadvm.hostbo.HostName" id="HostName" data-val-message="Please enter Host Name"
placeholder="Host Name*" />
</div>
<div class="col-sm-1">
<label class="control-label " for="IsActive">Active</label>
<input type="checkbox" id="IsActive" class="form-control" name="uploadvm.hostbo.IsActive" value="true" />
</div>
<div class="col-sm-6">
<label class="control-label " for="ServiceName">Service Name</label>
@* <input type="text" class="form-control required tobecleared" name="ServiceName" data-val-message="Please enter service Name"
placeholder="Service Name*" />*@
<select class="form-control qf-level required" name="uploadvm.servicebo.ServiceId" id="ServiceName"
data-val-message="Please select a Service">
<option value="" selected disabled>Service*</option>
@foreach (var item in Model.services)
{
<option value="@item.ServiceId">@item.ServiceName</option>
}
</select>
</div>
</div>
<br />
<div class="row">
<div class="col-sm-4">
<label class="control-label " for="ServiceProcedureVersion">Document Version</label>
<input type="text" class="form-control required tobecleared" name="uploadvm.serviceprocedurebo.VersionNum" data-val-message="Please enter Document Version"
placeholder="Document Version*" />
</div>
<div class="col-sm-4">
<label class="control-label " for="ServiceProcedureDate">Document Date</label>
<input type="text" class="form-control required tobecleared service_procedure_date" name="uploadvm.serviceprocedurebo.Date" data-val-message="Please enter date"
placeholder="Document Date*" value="@DateTime.Today.ToLongDateString()" />
</div>
</div>
<br />
<div class="row">
<div class="col-sm-3">
<input style="display: inline" id="filesToUpload" type="file" name="files" multiple="multiple" />
</div>
<div class="col-sm-6">
<ul id="fileList">
<li></li>
</ul>
</div>
<div class="col-sm-2">
<label class="control-label"></label>
<input type="submit" name="submit" value="Submit" class="btn btn-primary" />
</div>
</div>
<br />
<div id="ExistingServices">
</div>
</form>
</div>
我的控制器
[HttpPost]
public ActionResult UploadDocuments(UploadDocumentViewModel uploadvm, IEnumerable<HttpPostedFileBase> files)
{
HostBL hostbl = new HostBL();
DocumentBL documentbl = new DocumentBL();
//CompanyBL companybl=new CompanyBL();
long hostid = hostbl.CheckIfHostExists(uploadvm.hostbo.HostIp, uploadvm.hostbo.CompanyId);
if (hostid == 0 || hostid == null)
hostid = hostbl.InsertHost(uploadvm);
uploadvm.hostbo.HostId = hostid;
long serviceprocedureid = hostbl.InsertDetails(uploadvm);
//var CompanyName = companybl.getCompanyName(uploadvm.companybo.CompanyId);
List<ProcedureDocumentBO> documents = new List<ProcedureDocumentBO>();
//iterating through multiple file collection
foreach (HttpPostedFileBase file in files)
{
//Checking file is available to save.
if (file != null)
{
ProcedureDocumentBO proceduredocumentbo = new ProcedureDocumentBO();
var InputFileName = Path.GetFileName(file.FileName);
var filename = uploadvm.companybo.CompanyName
+ "_" + uploadvm.hostbo.HostName
+ "_" + uploadvm.servicebo.ServiceName
+ "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff")
+ "_" + InputFileName;
proceduredocumentbo.DocumentFileName = filename;
proceduredocumentbo.ServiceProcedureId = serviceprocedureid;
proceduredocumentbo.CreatedOn = System.DateTime.Today;
var ServerSavePath = Path.Combine(Server.MapPath("~/UploadedFiles/") + filename);
//Save file to server folder
file.SaveAs(ServerSavePath);
//assigning file uploaded status to ViewBag for showing message to user.
//ViewBag.UploadStatus = uploadvm.files.Count().ToString() + " files uploaded successfully.";
documents.Add(proceduredocumentbo);
//long documentid=documentbl.InsertDocument(uploadvm.documentbo);
}
}
uploadvm.documents = documents;
int res = documentbl.InsertDocuments(uploadvm);
//uploadvm.documents=
if (res <= 0)
{
TempData["Message"] = "Documents Not Uploaded";
}
else
{
TempData["Message"] = "Documents Uploaded";
}
UploadDocumentViewModel uploadvmm = new UploadDocumentViewModel();
CompanyBL companybl = new CompanyBL();
ServiceBL servicebl = new ServiceBL();
uploadvmm.companies = companybl.GetAllCompanies();
uploadvmm.services = servicebl.GetAllServices();
return View(uploadvmm);
}
传递的files参数对我来说始终为null。如何传递文件?
答案 0 :(得分:0)
public string writeFile(HttpPostedFileBase file, string fileName, string folder, HttpServerUtilityBase Server)
{
string FileName = fileName;
if (file != null && file.ContentLength > 0)
{
FileName = string.Format("{0}" + file.FileName.Trim('"'), DateTime.Now.Ticks);
string nameAndLocation = "~/" + folder + "/" + FileName;
file.SaveAs(Server.MapPath(nameAndLocation));
}
return FileName;
}
[HttpPost]
public string upload(Tunes tune)
{
var img = Request.Files["ImgFile"];
var mp3 = Request.Files["Mp3File"];
var image = writeFile(img, "", "TuneImages", Server);
var mp3Name = writeFile(mp3, "", "mp3", Server);
tune.mp3 = mp3Name;
tune.img = image;
db.Tunes.Add(tune);
db.SaveChanges();
return "Record Save Successfully";
}
您可以循环Request.Files
,您可以轻松上传多个文件而无需绑定视图模型。 Request.Files["ImgFile"]
Request.Files["Mp3File"]
ImgFile
和Mp3File
名称