Html.BeginForm und Hinzufügen von Eigenschaften


139

Wie würde ich enctype="multipart/form-data"einem Formular hinzufügen , das mithilfe von generiert wird <% Html.BeginForm(); %>?

Antworten:


251

Im Rahmen von htmlAttributes, z

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

Oder Sie können nullfür Aktion und Controller übergeben, um dasselbe Standardziel wie für BeginForm () ohne Parameter zu erhalten:

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

45
Nur als Hinweis können Sie für Aktion und Controller null übergeben, um dasselbe Standardziel zu erhalten, das BeginForm () ohne Parameter angibt.
— Brad Robinson

2
@Brad: Toller Kommentar! Integrierte es in die Antwort.
— Chiccodoro

Hallo, wie gebe ich den Enctype als Shift-JIS an, das japanisches Codierungsformat?
— Govind

Ich ziehe es immer vor, die Aktion / den Controller anzugeben, da die URL abhängig von Ihrer Seite bearbeitet werden kann. Wenn Sie also die Aktion / den Controller auf Null setzen, kann dies zu unerwartetem Verhalten führen.
— César León

19

Sie können auch die folgende Syntax für die stark typisierte Version verwenden:

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

1
In der aktuellen Version (RC1) ist dies nicht möglich.
— Jason Bunting

Was ist ein großer Mist :( Also, wie können wir das machen? Brauchen wir noch eine DLL? MVC-Futures oder so?
— Pure.Krome

4
Ja, in der Tat ... Ich glaube, alle stark typisierten (ausdrucksbasierten) Methoden befinden sich in der Futures-Assembly ( aspnet.codeplex.com/Release/… ).
— dp.

@ Jason, dp: Mit der Erweiterungsmethode von Nick wäre es auch möglich, diese Art von Signatur bereitzustellen. Die Einbeziehung von Futures ist sicherlich ein besserer Ansatz.
— Chiccodoro

13

Ich weiß, dass dies alt ist, aber Sie könnten eine benutzerdefinierte Erweiterung erstellen, wenn Sie dieses Formular immer wieder erstellen müssten:

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

Nutzung wird dann einfach

<% using(Html.BeginMultipartForm()) { %>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.