首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 ><输入type=“文件”/>的Html帮助器

<输入type=“文件”/>的Html帮助器
EN

Stack Overflow用户
提问于 2008-11-20 08:12:50
回答 6查看 171.5K关注 0票数 133

是否有用于文件上传的HTMLHelper?具体地说,我正在寻找一个替代

代码语言:javascript
复制
<input type="file"/>

使用ASP.NET MVC HTMLHelper。

或者,如果我使用

代码语言:javascript
复制
using (Html.BeginForm()) 

文件上传的HTML控件是什么?

EN

回答 6

Stack Overflow用户

发布于 2011-06-15 03:17:46

您还可以使用:

代码语言:javascript
复制
@using (Html.BeginForm("Upload", "File", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ 
    <p>
        <input type="file" id="fileUpload" name="fileUpload" size="23" />
    </p>
    <p>
        <input type="submit" value="Upload file" /></p> 
}
票数 21
EN

Stack Overflow用户

发布于 2008-11-20 10:34:43

不久前,我遇到了同样的问题,偶然发现了Scott Hanselman的一篇帖子:

Implementing HTTP File Upload with ASP.NET MVC including Tests and Mocks

希望这能有所帮助。

票数 8
EN

Stack Overflow用户

发布于 2016-08-04 17:37:05

或者,您可以正确地执行此操作:

在您的HtmlHelper扩展类中:

代码语言:javascript
复制
public static MvcHtmlString FileFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
    {
        return helper.FileFor(expression, null);
    }

public static MvcHtmlString FileFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
    {
        var builder = new TagBuilder("input");

        var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
        builder.GenerateId(id);
        builder.MergeAttribute("name", id);
        builder.MergeAttribute("type", "file");

        builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));

        // Render tag
        return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing));
    }

这一行:

代码语言:javascript
复制
var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));

生成一个对模型唯一的id,你知道在列表和其他东西中。model.Name等。

在模型中创建正确的属性:

代码语言:javascript
复制
public HttpPostedFileBase NewFile { get; set; }

然后您需要确保您的表单将发送文件:

代码语言:javascript
复制
@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" }))

然后这是你的帮手:

代码语言:javascript
复制
@Html.FileFor(x => x.NewFile)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/304617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档