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.