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

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

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

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()) { %>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.