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(); %>?

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"})

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" })) 
   { %>

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()) { %>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.