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.