Html.BeginForm và thêm thuộc tính


139

Làm thế nào tôi có thể thêm enctype="multipart/form-data"về một hình thức được tạo bằng cách sử dụng <% Html.BeginForm(); %>?

Câu trả lời:


251

Là một phần của htmlAttribut, vd

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

Hoặc bạn có thể truyền nullcho hành động và bộ điều khiển để có cùng mục tiêu mặc định như với BeginForm () mà không có bất kỳ tham số nào:

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

45
Cũng giống như một ghi chú, bạn có thể truyền null cho hành động và bộ điều khiển để có cùng mục tiêu mặc định mà BeginForm () không có tham số đưa ra.
Brad Robinson

2
@Brad: Nhận xét tuyệt vời! Kết hợp nó vào anwer.
chiccodoro

xin chào, làm cách nào để chỉ định enctype là Shift-JIS là định dạng mã hóa tiếng Nhật?
Govind

Tôi luôn thích chỉ định hành động / trình điều khiển, vì url có thể bị thao túng tùy thuộc vào trang bạn làm gì, vì vậy, để hành động / trình điều khiển trên null có thể gây ra các hành vi không mong muốn.
César León

19

Bạn cũng có thể sử dụng cú pháp sau cho phiên bản được gõ mạnh:

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

1
Không thể làm điều này trong phiên bản hiện tại (RC1).
Jason Bunting

Đó là một con số khổng lồ :( Vậy làm thế nào chúng ta có thể làm điều này? Chúng ta có cần một dll khác không? MVC tương lai hay gì đó?
Pure.Krom

4
Vâng, thực sự ... tôi tin rằng tất cả các phương thức được gõ mạnh (dựa trên biểu thức) đều nằm trong tập hợp tương lai ( aspnet.codeplex.com/Release/ Lỗi ).
Đp.

@Jason, dp: Sử dụng phương thức mở rộng của Nick, cũng có thể cung cấp loại chữ ký đó. Vẫn bao gồm tương lai chắc chắn là một cách tiếp cận tốt hơn.
chiccodoro

13

Tôi biết điều này đã cũ nhưng bạn có thể tạo tiện ích mở rộng tùy chỉnh nếu bạn cần tạo lại biểu mẫu đó nhiều lần:

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

Sử dụng sau đó chỉ trở thành

<% using(Html.BeginMultipartForm()) { %>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.