Html.BeginForm и добавление свойств


139

Как мне добавить enctype="multipart/form-data"в форму, созданную с помощью <% Html.BeginForm(); %>?

Ответы:


252

Как часть 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: Отличный комментарий! Включил его в анвер.
chiccodoro

привет, как мне указать enctype как Shift-JIS, который является японским форматом кодировки?
Govind

Я всегда предпочитаю указывать действие / контроллер, потому что URL-адресом можно управлять в зависимости от того, что вы делаете на странице, поэтому разрешение действия / контроллера на null может вызвать неожиданное поведение.
César León

19

Вы также можете использовать следующий синтаксис для строго типизированной версии:

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

1
В текущей версии (RC1) этого сделать нельзя.
Джейсон Бантинг,

Что является
большим обломом

4
Да, действительно ... Я считаю, что все строго типизированные (основанные на выражениях) методы находятся в сборке Futures ( 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.