C# 为什么文件类型的HTML助手编辑器在C和ASP.NET MVC中生成多个文件字段?
视图生成3个文件输入字段。以下是截图: 然而,当我为HttpPostedFileBase添加EditorFor模板时,它可以完美地工作。我想知道为什么会这样 这是我的模型:C# 为什么文件类型的HTML助手编辑器在C和ASP.NET MVC中生成多个文件字段?,c#,asp.net-mvc,razor,asp.net-mvc-5,C#,Asp.net Mvc,Razor,Asp.net Mvc 5,视图生成3个文件输入字段。以下是截图: 然而,当我为HttpPostedFileBase添加EditorFor模板时,它可以完美地工作。我想知道为什么会这样 这是我的模型: public class UploadFileViewModel { [Required] [Display(Name ="Select Excel File")] public HttpPostedFileBase ExcelFile { get; set; } } 控制员
public class UploadFileViewModel
{
[Required]
[Display(Name ="Select Excel File")]
public HttpPostedFileBase ExcelFile { get; set; }
}
控制员:
public class HomeController : Controller
{
public ActionResult UploadFileData()
{
return 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、ContentLength和FileName的属性,因此生成3个输入。因为您在additionalViewData中包含了type=file,所以生成的输入是type=file
你可以简单地使用
@Html.TextBoxFor(m => m.ExcelFile, new { type = "file" })
或者,您可以为HttpPostedFileBase的类型创建自定义EditorTemplate,以便EditorFor使用该模板,而不是默认模板。但是该模板需要包含@Html.TextBoxForm=>m,new{type=file},所以除了包含LabelFor和ValidationMessageFor以及封装元素之外,可能没有什么意义,因此视图中只需要@Html.EditorForm=>m.ExcelFile来生成所有Html。这可以简化主视图,但缺点是不能在一个视图中使用col-md-10,在另一个视图中使用col-md-8。在复杂对象上使用EditorFor会生成默认模板,其中包括对象每个属性的标签、表单控件和验证消息占位符。HttpPostedFileBase包含ContentType、ContentLength和FileName的属性,因此生成3个输入。因为您在additionalViewData中包含了type=file,所以生成的输入是type=file
你可以简单地使用
@Html.TextBoxFor(m => m.ExcelFile, new { type = "file" })
或者,您可以为HttpPostedFileBase的类型创建自定义EditorTemplate,以便EditorFor使用该模板,而不是默认模板。但是该模板需要包含@Html.TextBoxForm=>m,new{type=file},所以除了包含LabelFor和ValidationMessageFor以及封装元素之外,可能没有什么意义,因此视图中只需要@Html.EditorForm=>m.ExcelFile来生成所有Html。这可以简化主视图,但缺点是不能在一个视图中使用col-md-10,在另一个视图中使用col-md-8。Use@Html.TextBoxForm=>m.ExcelFile,new{type=file}@Stephen Muecke我们不能按照我在mvc5中使用的方式使用editor吗?我认为它应该在传递additionalviewdata type=file时起作用。这是虫子还是什么?这就是我发布此No的原因,除非您为HttpPostedFileBase类型创建EditorTemplate。我将很快发布一个答案来解释这种行为。使用@Html.TextBoxForm=>m.ExcelFile,new{type=file}@Stephen Muecke我们不能按照我在mvc5中使用的方式使用editor吗?我认为它应该在传递additionalviewdata type=file时起作用。这是虫子还是什么?这就是我发布此No的原因,除非您为HttpPostedFileBase类型创建EditorTemplate。我会很快发布一个答案来解释这种行为。