Html.BeginForm dan menambahkan properti


139

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

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

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

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()) { %>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.