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.