Html.BeginForm ve özellik ekleme


139

enctype="multipart/form-data"Kullanarak oluşturulan bir forma nasıl ekleyebilirim <% Html.BeginForm(); %>?

Yanıtlar:


251

HtmlAttributes'ın bir parçası olarak, ör.

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

Veya nullBeginForm () ile aynı varsayılan hedefi herhangi bir parametre olmadan almak için eylem ve denetleyiciyi iletebilirsiniz :

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

45
Not olarak, BeginForm () parametresinin verdiği aynı varsayılan hedefi almak için eylem ve denetleyici için null iletebilirsiniz.
Brad Robinson

2
@Brad: Harika yorum! Bunu anwer içine dahil etti.
chiccodoro

merhaba, Japonca kodlama formatı olan Shift-JIS olarak enctype'i nasıl belirlerim?
Govind

Her zaman eylemi / denetleyiciyi belirtmeyi tercih ederim, çünkü url, sayfanızın yaptıklarına bağlı olarak manipüle edilebilir, bu nedenle null üzerinde eylem / denetleyicinin bırakılması beklenmeyen davranışlara neden olabilir.
César León

19

Güçlü yazılan sürüm için aşağıdaki sözdizimini de kullanabilirsiniz:

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

1
Geçerli sürümde (RC1) bunu yapamıyorum.
Jason Bunting

Hangi büyük bir bummer :( Peki bunu nasıl yapabiliriz? Başka bir dll ihtiyacımız var mı? MVC futures veya başka bir şey?
Pure.Krome

4
Evet, gerçekten ... Bence kuvvetle yazılan (ifade tabanlı) yöntemlerin tümü vadeli işlem derlemesinde ( aspnet.codeplex.com/Release/… ).
dp.

@Jason, dp: Nick'in genişletme yöntemini kullanarak bu tür bir imza sağlamak da mümkün olurdu. Yine de gelecekleri dahil etmek kesinlikle daha iyi bir yaklaşımdır.
chiccodoro

13

Bunun eski olduğunu biliyorum, ancak bu formu tekrar tekrar oluşturmanız gerekiyorsa özel bir uzantı oluşturabilirsiniz:

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

Kullanım sonra olur

<% using(Html.BeginMultipartForm()) { %>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.