Html.BeginForm e adição de propriedades


139

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

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

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

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()) { %>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.