Html.BeginForm dan menambahkan properti

139

Bagaimana cara menambahkan enctype="multipart/form-data"ke formulir yang dibuat dengan menggunakan <% Html.BeginForm(); %>?

KevinUK
sumber

Jawaban:

251

Sebagai bagian dari htmlAttributes, mis

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

Atau Anda dapat meneruskan nullaksi dan pengontrol untuk mendapatkan target default yang sama dengan BeginForm () tanpa parameter apa pun:

Html.BeginForm(
    null, null, FormMethod.Post, new { enctype="multipart/form-data"})
liggett78
sumber
45
Sama seperti catatan, Anda dapat melewatkan null untuk tindakan dan pengontrol untuk mendapatkan target default yang sama dengan yang diberikan BeginForm () tanpa parameter.
Brad Robinson
2
@Brad: Komentar luar biasa! Dimasukkan ke dalam anwer.
chiccodoro
hai, bagaimana cara menentukan enctype sebagai Shift-JIS yang merupakan format penyandian Jepang?
Govind
Saya selalu memilih untuk menentukan action / controller, karena url dapat dimanipulasi tergantung pada apa yang Anda lakukan di halaman, jadi membiarkan action / controller pada null dapat menyebabkan perilaku yang tidak terduga.
César León
19

Anda juga dapat menggunakan sintaks berikut untuk versi yang sangat diketik:

<% using (Html.BeginForm<SomeController>(x=> x.SomeAction(), 
          FormMethod.Post, 
          new { enctype = "multipart/form-data" })) 
   { %>
dp.
sumber
1
Tidak dapat melakukan ini dalam versi saat ini (RC1).
Jason Bunting
Yang merupakan gelandangan besar :( Jadi bagaimana kita bisa melakukan ini? Apakah kita perlu dll lain? Masa depan MVC atau sesuatu?
Pure.Krome
4
Ya, memang ... Saya percaya semua metode (berbasis ekspresi) yang diketik sangat dalam majelis berjangka ( aspnet.codeplex.com/Release/… ).
dp.
@Jason, dp: Menggunakan metode ekstensi Nick, akan mungkin untuk memberikan tanda tangan semacam itu juga. Masih termasuk masa depan tentu saja merupakan pendekatan yang lebih baik.
chiccodoro
13

Saya tahu ini sudah lama tetapi Anda dapat membuat ekstensi khusus jika Anda perlu membuat formulir itu berulang-ulang:

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

Penggunaan kemudian menjadi

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