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.