EditorFor()是否可以用于创建<;输入类型=“;文件“>;

本文关键字:类型 输入 gt 文件 lt 用于 创建 EditorFor 是否 | 更新日期: 2023-09-27 17:57:38

给定这个模型,是否可以使用Html.EditorFor.()将文件上传输入元素呈现到页面?我摆弄了FileName属性的Datatype,它肯定会影响所呈现的编辑器形式。

public class DR405Model
{
    [DataType(DataType.Text)]
    public String TaxPayerId { get; set; }
    [DataType(DataType.Text)]
    public String ReturnYear { get; set; }
    public String  FileName { get; set; }
}

强类型*.aspx页面看起来像这个

    <div class="editor-field">
        <%: Html.EditorFor(model => model.FileName) %>
        <%: Html.ValidationMessageFor(model => model.FileName) %>
    </div>

EditorFor()是否可以用于创建<;输入类型=“;文件“>;

使用HttpPostedFileBase来表示视图模型上的上传文件而不是string:会更有意义

public class DR405Model
{
    [DataType(DataType.Text)]
    public string TaxPayerId { get; set; }
    [DataType(DataType.Text)]
    public string ReturnYear { get; set; }
    public HttpPostedFileBase File { get; set; }
}

那么你可以有以下视图:

<% using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) { %>
    ... input fields for other view model properties
    <div class="editor-field">
        <%= Html.EditorFor(model => model.File) %>
        <%= Html.ValidationMessageFor(model => model.File) %>
    </div>
    <input type="submit" value="OK" />
<% } %>

最后在~/Views/Shared/EditorTemplates/HttpPostedFileBase.ascx:中定义相应的编辑器模板

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<input type="file" name="<%: ViewData.TemplateInfo.GetFullHtmlFieldName("") %>" id="<%: ViewData.TemplateInfo.GetFullHtmlFieldId("") %>" />

现在控制器可能看起来像这样:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new DR405Model());
    }
    [HttpPost]
    public ActionResult Index(DR405Model model)
    {
        if (model.File != null && model.File.ContentLength > 0)
        {
            var fileName = Path.GetFileName(model.File.FileName);
            var path = Path.Combine(Server.MapPath("~/App_Data"), fileName);
            model.File.SaveAs(path);
        }
        return RedirectToAction("Index");
    }
}

这里有一个MVC 5的例子(htmlAttributes所必需的)。

在~''Views''Shared''EditorTemplates 下创建一个名为HttpPostedFileBase.cshtml的文件

@model HttpPostedFileBase
@{
    var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
    htmlAttributes["type"] = "file";
}
@Html.TextBoxFor(model => model, htmlAttributes)

这将生成具有正确id和名称的控件,并在从模型EditorFor模板编辑集合时起作用。

添加:htmlAttributes = new { type = "file" }

<div class="editor-field">
    <%: Html.EditorFor(model => model.FileName, new { htmlAttributes = new { type = "file" }}) %>
    <%: Html.ValidationMessageFor(model => model.FileName) %>
</div>

注意:我使用的是MVC 5,我还没有在其他版本上测试过。

没有,但看看http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx