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

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

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

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()) { %>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.