Html.BeginForm i dodawanie właściwości

139

Jak mam dodać enctype="multipart/form-data"do formularza, który jest generowany przy użyciu <% Html.BeginForm(); %>?

KevinUK
źródło

Odpowiedzi:

251

W ramach htmlAttributes, np

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

Lub możesz przekazać nullakcję i kontroler, aby uzyskać ten sam domyślny cel, co w przypadku BeginForm () bez żadnych parametrów:

Html.BeginForm(
    null, null, FormMethod.Post, new { enctype="multipart/form-data"})
liggett78
źródło
45
Tak jak uwaga, możesz przekazać null dla akcji i kontrolera, aby uzyskać ten sam domyślny cel, który daje BeginForm () bez parametrów.
Brad Robinson,
2
@Brad: Świetny komentarz! Włączono to do odpowiedzi.
chiccodoro,
cześć, jak określić typ kodowania jako Shift-JIS, który jest japońskim formatem kodowania?
Govind
Zawsze wolę określić akcję / kontroler, ponieważ adres URL może być manipulowany w zależności od tego, co robisz na stronie, więc pozostawienie akcji / kontrolera na null może spowodować nieoczekiwane zachowanie.
César León
19

Możesz również użyć następującej składni dla wersji silnie wpisanej:

<% using (Html.BeginForm<SomeController>(x=> x.SomeAction(), 
          FormMethod.Post, 
          new { enctype = "multipart/form-data" })) 
   { %>
dp.
źródło
1
Nie można tego zrobić w obecnej wersji (RC1).
Jason Bunting
Co to jest ogromny kłopot :( Więc jak możemy to zrobić? Czy potrzebujemy kolejnej biblioteki dll? MVC futures czy coś takiego?
Pure.Krome
4
Tak, rzeczywiście ... Uważam, że wszystkie metody silnie wpisane (oparte na wyrażeniach) znajdują się w zestawie futures ( aspnet.codeplex.com/Release/ ... ).
dp.
@Jason, dp: Używając metody rozszerzenia Nicka, byłoby możliwe również dostarczenie tego rodzaju podpisu. Wciąż uwzględnianie kontraktów terminowych jest z pewnością lepszym podejściem.
chiccodoro,
13

Wiem, że to jest stare, ale możesz utworzyć niestandardowe rozszerzenie, jeśli chcesz tworzyć ten formularz w kółko:

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

Użycie po prostu się staje

<% using(Html.BeginMultipartForm()) { %>
Nick Olsen
źródło