Html.BeginForm e adição de propriedades

139

Como eu adicionaria enctype="multipart/form-data"a um formulário gerado usando <% Html.BeginForm(); %>?

KevinUK
fonte

Respostas:

251

Como parte de htmlAttributes, por exemplo

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

Ou você pode passar nullpara action e controller para obter o mesmo destino padrão que para BeginForm () sem nenhum parâmetro:

Html.BeginForm(
    null, null, FormMethod.Post, new { enctype="multipart/form-data"})
liggett78
fonte
45
Apenas como observação, você pode passar nulo para ação e controlador para obter o mesmo destino padrão que BeginForm () sem parâmetros.
Brad Robinson
2
@ Brad: Ótimo comentário! Incorporado na resposta.
Chiccodoro 21/10
oi, como faço para especificar enctype como Shift-JIS, que é o formato de codificação japonês?
precisa
Eu sempre prefiro especificar a ação / controlador, porque o URL pode ser manipulado dependendo do que você faz na página, portanto, deixar ação / controlador em nulo pode causar comportamentos inesperados.
César León
19

Você também pode usar a seguinte sintaxe para a versão fortemente tipada:

<% using (Html.BeginForm<SomeController>(x=> x.SomeAction(), 
          FormMethod.Post, 
          new { enctype = "multipart/form-data" })) 
   { %>
dp.
fonte
1
Não é possível fazer isso na versão atual (RC1).
21139 Jason Bunting
Que é uma chatice enorme :( Então, como podemos fazer isso precisamos de outra dll futuros MVC ou algo assim???
Pure.Krome
4
Sim, de fato ... Eu acredito que todos os métodos fortemente tipados (baseados em expressões) estão no assembly de futuros ( aspnet.codeplex.com/Release/… ).
dp.
@ Jason, dp: Usando o método de extensão de Nick, seria possível fornecer esse tipo de assinatura também. Ainda incluindo futuros é certamente uma abordagem melhor.
Chiccodoro 21/10
13

Sei que isso é antigo, mas você pode criar uma extensão personalizada se precisar criar esse formulário repetidamente:

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

O uso então se torna

<% using(Html.BeginMultipartForm()) { %>
Nick Olsen
fonte