gpt4 book ai didi

c# - 为什么 HTML 助手 EditorFor of type file 在 C# 和 ASP.NET MVC 中生成多个文件字段?

转载 作者:太空宇宙 更新时间:2023-11-03 18:55:43 25 4
gpt4 key购买 nike

View 生成 3 个文件输入字段。这是屏幕截图:

Screen grab of view

但是,当我为 HttpPostedFileBase 添加 EditorFor 模板时,它会完美运行。我想知道为什么会这样。

这是我的模型:

public class UploadFileViewModel
{
[Required]
[Display(Name ="Select Excel File")]
public HttpPostedFileBase ExcelFile { get; set; }
}

Controller :

public class HomeController : Controller
{
public ActionResult UploadFileData()
{
return View();
}
}

View :

@model DemoProject.Models.UploadFileViewModel
@{
ViewBag.Title = "Upload File Data";
}

<h2>Upload File Data</h2>
<p class="alert-success">@ViewBag.Success</p>
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken();
@Html.ValidationSummary("", new { @class = "text-danger" });

<div class="form-horizontal">
<div class="form-group">
@Html.LabelFor(model=>model.ExcelFile, htmlAttributes: new {@class="control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model=>model.ExcelFile, new { htmlAttributes = new { type = "file" } })
</div>
</div>

<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Upload" class="btn btn-default" />
</div>
</div>

</div>
}

最佳答案

使用 EditorFor()在复杂对象上为对象的每个属性生成默认模板(包括标签、表单控件和验证消息占位符)。 HttpPostedFileBase包含 ContentType 的属性, ContentLengthFileName所以产生了3个输入。因为你包含了type="file"additionalViewData ,生成的输入是 type="file" .

你可以简单地使用

@Html.TextBoxFor(m => m.ExcelFile, new { type = "file" })

或者您可以创建自定义 EditorTemplate对于类型 HttpPostedFileBase这样EditorFor()使用该模板,而不是默认模板。但是该模板需要包含 @Html.TextBoxFor(m => m, new { type = "file" })所以除了包含 LabelFor() 之外可能没什么意义和 ValidationMessageFor()并附上 <div>元素,以便 View 中只需要 @Html.EditorFor(m => m.ExcelFile)生成所有的html。这可以简化主视图,但缺点是你不能,例如,col-md-10。在一个 View 中和col-md-8在另一个。

关于c# - 为什么 HTML 助手 EditorFor of type file 在 C# 和 ASP.NET MVC 中生成多个文件字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45949726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com