Html.BeginForm和添加属性


139

我将如何添加enctype="multipart/form-data"到使用生成的表单<% Html.BeginForm(); %>

Answers:


251

作为htmlAttributes的一部分,例如

Html.BeginForm(
    action, controller, FormMethod.Post, new { enctype="multipart/form-data"})

或者,您可以传递nullaction和controller来获取与BeginForm()相同的默认目标,而无需任何参数:

Html.BeginForm(
    null, null, FormMethod.Post, new { enctype="multipart/form-data"})

45
只需注意,您可以为操作和控制器传递null,以获取没有参数的BeginForm()提供的默认目标。
布拉德·罗宾逊

2
@布拉德:很棒的评论!将其合并到答案中。
chiccodoro 2011年

嗨,我如何将enctype指定为Shift-JIS,这是日语编码格式?
Govind 2014年

我总是喜欢指定action / controller,因为可以根据您的页面操作来操纵url,因此,将action / controller设置为null可能会导致意外行为。
塞萨尔·莱昂

19

对于强类型版本,您还可以使用以下语法:

<% using (Html.BeginForm<SomeController>(x=> x.SomeAction(), 
          FormMethod.Post, 
          new { enctype = "multipart/form-data" })) 
   { %>

1
在当前版本(RC1)中无法执行此操作。
詹森·邦廷

这是一个巨大的遗憾:(那么我们该怎么做?我们需要另一个dll吗?MVC期货还是其他东西?
Pure.Krome 2009年

4
是的,确实...我相信所有强类型(基于表达式)的方法都在期货大会中(aspnet.codeplex.com/Release/…)。
dp。

@Jason,dp:使用Nick的扩展方法,也可以提供这种签名。仍然包括期货无疑是一个更好的方法。
chiccodoro 2011年

13

我知道这很旧,但是如果您需要一遍又一遍地创建表格,则可以创建一个自定义扩展名:

public static MvcForm BeginMultipartForm(this HtmlHelper htmlHelper)
{
    return htmlHelper.BeginForm(null, null, FormMethod.Post, 
     new Dictionary<string, object>() { { "enctype", "multipart/form-data" } });
}

用法就变成了

<% using(Html.BeginMultipartForm()) { %>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.