Html.BeginForm et ajout de propriétés

139

Comment procéder pour ajouter enctype="multipart/form-data"à un formulaire généré à l'aide de <% Html.BeginForm(); %>?

KevinUK
la source

Réponses:

251

Dans le cadre de htmlAttributes, par exemple

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

Ou vous pouvez passer nullpour action et contrôleur pour obtenir la même cible par défaut que pour BeginForm () sans aucun paramètre:

Html.BeginForm(
    null, null, FormMethod.Post, new { enctype="multipart/form-data"})
liggett78
la source
45
Pour rappel, vous pouvez passer null pour l'action et le contrôleur pour obtenir la même cible par défaut que celle fournie par BeginForm () sans paramètres.
Brad Robinson
2
@Brad: Excellent commentaire! Incorporé dans la réponse.
chiccodoro
salut, comment spécifier enctype comme Shift-JIS qui est le format d'encodage japonais?
Govind
Je préfère toujours spécifier l'action / le contrôleur, car l'URL peut être manipulée en fonction de ce que vous faites sur la page, donc laisser action / contrôleur sur null peut provoquer des comportements inattendus.
César León
19

Vous pouvez également utiliser la syntaxe suivante pour la version fortement typée:

<% using (Html.BeginForm<SomeController>(x=> x.SomeAction(), 
          FormMethod.Post, 
          new { enctype = "multipart/form-data" })) 
   { %>
dp.
la source
1
Impossible de faire cela dans la version actuelle (RC1).
Jason Bunting
Ce qui est une énorme déception: (Alors, comment pouvons-nous faire cela?
Avons
4
Oui, en effet ... Je crois que toutes les méthodes fortement typées (basées sur des expressions) sont dans l'assembly des futurs ( aspnet.codeplex.com/Release/… ).
dp.
@Jason, dp: En utilisant la méthode d'extension de Nick, il serait également possible de fournir ce type de signature. Toujours inclure les futurs est certainement une meilleure approche.
chiccodoro
13

Je sais que c'est ancien, mais vous pouvez créer une extension personnalisée si vous avez besoin de créer ce formulaire encore et encore:

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

L'utilisation devient alors

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