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(); %>?

KevinUK
quelle

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"})
liggett78
quelle
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" })) 
   { %>
dp.
quelle
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()) { %>
Nick Olsen
quelle