Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么文件类型的HTML助手编辑器在C和ASP.NET MVC中生成多个文件字段?_C#_Asp.net Mvc_Razor_Asp.net Mvc 5 - Fatal编程技术网

C# 为什么文件类型的HTML助手编辑器在C和ASP.NET MVC中生成多个文件字段?

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; } } 控制员

视图生成3个文件输入字段。以下是截图:

然而,当我为HttpPostedFileBase添加EditorFor模板时,它可以完美地工作。我想知道为什么会这样

这是我的模型:

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。我会很快发布一个答案来解释这种行为。