我已經坐在辦公桌前好幾天了,閱讀谷歌搜索,試圖讓我的 ASP.Net Core 應用程式將檔案上傳到物理位置,并將檔案名存盤在資料庫中。但是,每當我嘗試上傳檔案時,IFormFile 總是回傳 null。我對此很陌生。
這是查看代碼
<div >
<form method="post" enctype="multipart/form-data" asp-controller="Quiz" asp-action="Create" >
<div asp-validation-summary="ModelOnly" ></div>
<div >
<label asp-for="QuizTitle" ></label>
<input asp-for="QuizTitle" />
<span asp-validation-for="QuizTitle" ></span>
</div>
<div >
<label asp-for="Category" ></label>
<input asp-for="Category" />
<span asp-validation-for="Category" ></span>
</div>
<div >
<label asp-for="Author" ></label>
<input asp-for="Author" />
<span asp-validation-for="Author" ></span>
</div>
<div >
<label asp-for="QuizPdf" ></label>
<input asp-for="QuizPdf" >
<span asp-validation-for="QuizPdf" ></span>
</div>
<div >
<input type="submit" value="Create" />
</div>
</form>
控制器代碼
public IActionResult Create()
{
return View();
}
// POST: Quiz/Create
// To protect from overposting attacks, enable the specific properties you want to bind to.
// For more details, see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([FromForm]IFormFile PostedFile, QuizDetailsModel quizDetailsModel)
{
if (ModelState.IsValid)
{
if (quizDetailsModel.QuizPdf != null)
{
string folder = "files/pdfs/";
folder = quizDetailsModel.QuizPdf.FileName;
quizDetailsModel.QuizPdfUrl = folder;
string serverFolder = Path.Combine(_webHostEnvironment.WebRootPath, folder);
await quizDetailsModel.QuizPdf.CopyToAsync(new FileStream(serverFolder, FileMode.Create));
}
_context.Add(quizDetailsModel);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(quizDetailsModel);
}
和型號代碼
public class QuizDetailsModel
{
public int Id { get; set; }
[Required(ErrorMessage = "Please enter a quiz title.")]
[Display(Name = "Title")]
public string QuizTitle { get; set; }
[Required(ErrorMessage = "Please select a category.")]
public string Category { get; set; }
[Required(ErrorMessage = "Please enter a quiz author")]
public string Author { get; set; }
[Display(Name = "Upload quiz pdf.")]
[Required]
[NotMapped]
public IFormFile? QuizPdf { get; set; }
public string QuizPdfUrl { get; set; }
[Display(Name = "Date Added")]
[DisplayFormat(DataFormatString = "{0:MMMM dd, yyyy")]
[DataType(DataType.Date)]
public DateTime DateAdded { get; set; } = DateTime.Now;
public List<QuestionsAnswersModel> QuestionsAnswers { get; set; } = new List<QuestionsAnswersModel>();

選項 2:在創建視圖中,添加 type="file", method="post" enctype="multipart/form-data"
<form asp-action="Create" method="post" enctype="multipart/form-data" >
<div asp-validation-summary="ModelOnly" ></div>
...
<div >
<label asp-for="QuizPdf" ></label>
<input asp-for="QuizPdf" type="file" />
<span asp-validation-for="QuizPdf" ></span>
</div>
...
<div >
<input type="submit" value="Create" />
</div>
</form>
結果:

uj5u.com熱心網友回復:
引數被呼叫PostedFile,欄位名被呼叫QuizPdf你認為它們是一樣的嗎?
更新您的代碼,如下所示。洗掉[FromForm]不需要這個,并將您的引數名稱更改PostedFile為QuizPdf
public async Task<IActionResult> Create(IFormFile QuizPdf , QuizDetailsModel quizDetailsModel)
{
//clarify code
}
它肯定會解決你的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461415.html
上一篇:將Json轉換為物件串列
