Html.BeginForm y agregando propiedades

139

¿Cómo haría para agregar enctype="multipart/form-data"a un formulario que se genera mediante el uso <% Html.BeginForm(); %>?

KevinUK
fuente

Respuestas:

251

Como parte de htmlAttributes, p. Ej.

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

O puede pasar nullpor acción y controlador para obtener el mismo objetivo predeterminado que para BeginForm () sin ningún parámetro:

Html.BeginForm(
    null, null, FormMethod.Post, new { enctype="multipart/form-data"})
liggett78
fuente
45
Solo como una nota, puede pasar nulo para la acción y el controlador para obtener el mismo objetivo predeterminado que BeginForm () sin parámetros proporciona.
Brad Robinson
2
@Brad: ¡Gran comentario! Lo incorporó a la respuesta.
chiccodoro
hola, ¿cómo especifico enctype como Shift-JIS, que es el formato de codificación japonés?
Govind
Siempre prefiero especificar la acción / controlador, porque la URL se puede manipular dependiendo de lo que haga su página, por lo que dejar acción / controlador en nulo puede causar comportamientos inesperados.
César León
19

También puede usar la siguiente sintaxis para la versión fuertemente tipada:

<% using (Html.BeginForm<SomeController>(x=> x.SomeAction(), 
          FormMethod.Post, 
          new { enctype = "multipart/form-data" })) 
   { %>
dp.
fuente
1
No se puede hacer esto en la versión actual (RC1).
Jason Bunting
Que es un rollo masiva :( Entonces, ¿cómo podemos hacer esto necesitamos otro DLL futuros MVC o algo???
Pure.Krome
44
Sí, de hecho ... Creo que todos los métodos fuertemente tipados (basados ​​en expresiones) están en el ensamblaje de futuros ( aspnet.codeplex.com/Release/… ).
dp.
@ Jason, dp: utilizando el método de extensión de Nick, también sería posible proporcionar ese tipo de firma. Aún incluir futuros es ciertamente un mejor enfoque.
chiccodoro
13

Sé que esto es antiguo, pero puede crear una extensión personalizada si necesita crear ese formulario una y otra vez:

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

El uso se convierte en

<% using(Html.BeginMultipartForm()) { %>
Nick Olsen
fuente