c# - 如何在 MVC 视图中动态添加/删除文件
问题描述
我正在创建一个视图以添加许多文件并保存在数据库中。我的模型如下。
public class WebEmail
{
public string EmailID { get; set; }
public string Name { get; set; }
//[Required]
public HttpPostedFileBase PdfFile { get; set; }
public byte[] pdfSource { get; set; }
public string FileName { get; set; }
public List<WebAsset> LstWebAssets { get; set; }
}
public class WebAsset
{
public string AssetId { get; set; }
public bool IsPreview { get; set; }
public HttpPostedFileBase PdfFile { get; set; }
public byte[] pdfSource { get; set; }
public string FileName { get; set; }
}
我无法将子内容发布到控制器。
这是控制器动作:
public ActionResult Create(WebEmail Email)
{
var files = Request.Files;
if (ModelState.IsValid)
{
return RedirectToAction("Index");
}
else
{
return View(Email);
}
}
我正在使用 javascript 添加/删除视图中的文件。以下是我如何实现它来捕获文件:
<div class="form-group">
@Html.Label("Upload Files", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<div id="uploads" class="row" style="margin:auto;">
@foreach (var item in Model.LstWebAssets)
{
<div class="radio col-sm-2" id="uploadtemplate">
@Html.RadioButtonFor(x => item.IsPreview,true, htmlAttributes: new { @class = "radio" })
<input type="radio" name="IsPreview" checked>
<input type="file" id="inputPdf" name="PdfFile" accept="application/pdf" />
</div>
}
<div class="col-sm-2">
<input type="button" value="+" onclick="DynamicFileInput(this.parentNode)" />
</div>
</div>
</div>
</div>
Javascript代码:
function DynamicFileInput(addbtn) {
var division = document.createElement('DIV');
division.innerHTML = AddDynamicInput();
document.getElementById("uploads").insertBefore(division, addbtn);
}
function AddDynamicInput() {
return `<div class="radio col-sm-2" id="uploadtemplate">
<input type="radio" name="IsPreview">
<input type="file" id="inputPdf" name="PdfFile" accept="application/pdf" />
<input class="btn btn-primary" type="button" id="btnDelete" value="-" onclick="DeleteInput(this)" />
</div>`;
}
function DeleteInput(thisButton) {
//$('#uploads').remove(thisButton.parent.parent);
document.getElementById("uploads").removeChild(thisButton.parentNode.parentNode);
}
此代码允许我在视图中添加或删除文件,但是当我尝试发布到控制器时,model.LstWebAssets 为空。它不会从视图中捕获文件信息。
我可以从 Request.Files 中捕获文件,但这不提供其他文件详细信息,如 AssetId、IsPreview 值。
请建议我如何能够在控制器中捕获列表。如果有人能提出更好的方法来在 UI 中实现此功能,我将不胜感激。
解决方案
推荐阅读
- node.js - 获取 https://gcp.io/v2/:x509: 未知权威签署的证书
- eiffel - 埃菲尔避免重复进入ecf文件
- javascript - 用户离开页面时如何删除会话?
- postgresql - postgres 中的 CROSSTAB 和 DATEPART?它有效吗?
- flutter - 在颤振行/列中独立对齐元素
- macos - 如何将引导扇区二进制文件写入 USB 驱动器?
- mongodb - (节点:18560)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“typeFn”
- gitlab - GitLab:多项目管道中的作业工件
- typo3 - Typo3 更新 9.5.16 非管理员用户的页面树错误
- angular - 如何检测同一组件中从一个输入到另一个输入的变化