Html.BeginForm และการเพิ่มคุณสมบัติ


139

ฉันจะเพิ่มenctype="multipart/form-data"ฟอร์มไปยังฟอร์มที่สร้างขึ้นโดยใช้<% Html.BeginForm(); %>อย่างไร

คำตอบ:


251

เป็นส่วนหนึ่งของ htmlAttributes เช่น

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

หรือคุณสามารถผ่านnullการกระทำและตัวควบคุมเพื่อรับเป้าหมายเริ่มต้นเช่นเดียวกับ BeginForm () โดยไม่มีพารามิเตอร์ใด ๆ :

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

45
เช่นเดียวกับบันทึกย่อคุณสามารถส่งค่า null สำหรับการดำเนินการและตัวควบคุมเพื่อรับเป้าหมายเริ่มต้นเดียวกันกับ BeginForm () โดยไม่มีพารามิเตอร์ให้
แบรดโรบินสัน

2
@Brad: ความคิดเห็นยอดเยี่ยม! รวมเข้าไว้ใน anwer
chiccodoro

สวัสดีฉันจะระบุ enctype เป็น Shift-JIS ซึ่งเป็นรูปแบบการเข้ารหัสภาษาญี่ปุ่นได้อย่างไร
Govind

ฉันชอบระบุการกระทำ / คอนโทรลเลอร์เสมอเนื่องจาก url สามารถจัดการได้ขึ้นอยู่กับว่าคุณทำหน้าอะไรดังนั้นการให้ action / controller บน null อาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด
CésarLeón

19

คุณยังสามารถใช้ไวยากรณ์ต่อไปนี้สำหรับเวอร์ชันที่พิมพ์อย่างยิ่ง:

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

1
ไม่สามารถทำได้ในรุ่นปัจจุบัน (RC1)
35490 Jason

ซึ่งเป็น bummer ขนาดใหญ่ :( ดังนั้นเราจะทำเช่นนี้เราต้องการ dll อื่นได้หรือไม่ MVC ฟิวเจอร์สหรือบางสิ่งบางอย่าง
Pure.Krome

4
ใช่แน่นอน ... ฉันเชื่อว่าวิธีการพิมพ์ (อิงตามนิพจน์) ทั้งหมดนั้นอยู่ในการประชุมล่วงหน้า ( aspnet.codeplex.com/Release/ ...... )
dp

@Jason, dp: การใช้วิธีการขยายของ Nick จะเป็นไปได้ที่จะให้ลายเซ็นชนิดนั้นเช่นกัน ยังคงรวมถึงฟิวเจอร์สเป็นวิธีที่ดีกว่าอย่างแน่นอน
chiccodoro

13

ฉันรู้ว่ามันเก่า แต่คุณสามารถสร้างส่วนขยายที่กำหนดเองได้หากคุณต้องการสร้างแบบฟอร์มนี้ซ้ำแล้วซ้ำอีก:

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

การใช้งานก็จะกลายเป็น

<% using(Html.BeginMultipartForm()) { %>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.