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: Чудовий коментар! Включили його в передвідник.
чікодоро

привіт, як я можу вказати enctype як Shift-JIS, що є японським форматом кодування?
Говінд

Я завжди вважаю за краще вказувати дію / контролер, тому що URL-адресом можна керувати залежно від того, що ви робите на сторінці, тому пускання дії / контролера на нуль може спричинити несподівані поведінки.
Сезар Леон

19

Для сильно набраної версії ви також можете використовувати такий синтаксис:

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

1
Неможливо зробити це в поточній версії (RC1).
Джейсон Бантінг

Що таке масивний об’єм :( Тож як ми можемо це зробити? Чи потрібен нам ще один dll? MVC ф'ючерси чи щось таке?
Pure.Krome

4
Так, справді ... Я вважаю, що всі сильно типізовані (на основі виразів) методи є у складі ф'ючерсів ( aspnet.codeplex.com/Release/… ).
д.п.

@Jason, dp: Використовуючи метод розширення Ніка, можна було б надати і такий тип підпису. Все ж включення ф'ючерсів - це, безумовно, кращий підхід.
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()) { %>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.