Html.BeginForm e aggiunta di proprietà


139

Come farei per aggiungere enctype="multipart/form-data"un modulo generato utilizzando <% Html.BeginForm(); %>?

Risposte:


251

Come parte di htmlAttributes, ad es

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

Oppure puoi passare nullall'azione e al controller per ottenere la stessa destinazione predefinita di BeginForm () senza parametri:

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

45
Proprio come una nota, è possibile passare null per azione e controller per ottenere la stessa destinazione predefinita che BeginForm () senza parametri fornisce.
Brad Robinson,

2
@Brad: ottimo commento! Incorporato nella risposta.
Chiccodoro,

ciao, come posso specificare enctype come Shift-JIS che è il formato di codifica giapponese?
Govind

Preferisco sempre specificare l'azione / controller, perché l'URL può essere manipolato a seconda di ciò che fai nella pagina, quindi lasciare l'azione / controller su null può causare comportamenti imprevisti.
César León

19

È inoltre possibile utilizzare la sintassi seguente per la versione fortemente tipizzata:

<% using (Html.BeginForm<SomeController>(x=> x.SomeAction(), 
          FormMethod.Post, 
          new { enctype = "multipart/form-data" })) 
   { %>

1
Non è possibile farlo nella versione corrente (RC1).
Jason Bunting,

Il che è un grosso rompicapo :( Quindi, come possiamo fare questo? Abbiamo bisogno di un'altra DLL? Futures MVC o qualcosa del genere?
Pure.Krome

4
Sì, davvero ... Credo che tutti i metodi fortemente tipizzati (basati sull'espressione) siano nell'assemblea dei futures ( aspnet.codeplex.com/Release/… ).
dp.

@Jason, dp: usando il metodo di estensione di Nick, sarebbe possibile fornire anche quel tipo di firma. Includere il futuro è sicuramente un approccio migliore.
Chiccodoro,

13

So che questo è vecchio ma potresti creare un'estensione personalizzata se avessi bisogno di creare quel modulo più e più volte:

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

L'utilizzo quindi diventa

<% using(Html.BeginMultipartForm()) { %>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.