当试图上传时,控制器动作没有从视图中抓取文件
本文关键字:视图 文件 抓取 控制器 | 更新日期: 2023-09-27 18:04:25
我试图将。csv文件上传到SQL数据库,但控制器动作似乎根本没有抓取文件。检查代码,我一定遗漏了一块:
视图:
@using (Html.BeginForm("UploadValidationTable", "Home", FormMethod.Post))
{
<table style="margin-top: 150px;">
<tr>
<td>
<label for="csvFile">Filename:</label>
</td>
<td>
<input type="file" name="csvFile" id="csvFile"/>
</td>
<td><input type="submit" value="Upload"/></td>
</tr>
</table>
}
控制器:
[HttpPost]
public JsonResult UploadValidationTable(HttpPostedFileBase csvFile)
{
var inputFileDescription = new CsvFileDescription
{
SeparatorChar = ',',
FirstLineHasColumnNames = true
};
var cc = new CsvContext();
var filePath = uploadFile(csvFile.InputStream);
var model = cc.Read<OutstandingCreditCsv>(filePath, inputFileDescription);
try
{
var entity = new OutstandingCreditCsv();
foreach (var item in model)
{
entity.PoNumber = item.PoNumber;
entity.CreditInvoiceDate = item.CreditInvoiceDate;
entity.CreditInvoiceNumber = item.CreditInvoiceNumber;
entity.CreditInvoiceAmount = item.CreditInvoiceAmount;
}
}
catch(LINQtoCSVException ex)
{
}
return Json(model, "text/json");
}
csvFile只是出现为空,不知道会发生什么,因为它是在视图中命名的,我有post方法围绕着它。它使它下降,直到var filePath = uploadFile(csvFile.InputStream);
,然后中断,因为该方法试图传递一个空值。谢谢!
我遇到了这个当尝试使用MVC上传文件到db一段时间后,我使用脚手架视图(所以它也传递了一个对象的形式),所以它可能有点不同。
在HTML.BeginForm()调用中,你需要添加属性enctype="multipart/form-data"
@using (Html.BeginForm("UploadValidationTable", "Home", FormMethod.Post, new {enctype="multipart/form-data"}))
我认为您需要将enctype='multipart/form-data'
添加到您的<form>
using (Html.BeginForm("UploadValidationTable", "Home", FormMethod.Post,
new { enctype = "multipart/form-data" }))
您需要更改表单声明。尝试在表单声明中添加enctype = "multipart/form-data"。
@using (Html.BeginForm("UploadValidationTable", "Home", FormMethod.Post, new { enctype = "multipart/form-data"}))
您需要在表单声明中添加以下内容:
@using (Html.BeginForm("UploadValidationTable", "Home", null,FormMethod.Post, new { enctype = "multipart/form-data" }))