ASP-MVC-Datei Hochladen HttpPostedFileBase Null ist
In meinem controller habe ich, denn ich wollte in der Lage sein, füllen Sie einige details über die video-und eigentlich hochladen, das Video-Klasse muss nicht den tatsächlichen video -, weil es sich an andere web-service.
public class VideoUploadModel
{
public HttpPostedFileBase vid { get; set; }
public Video videoModel { get; set; }
}
//
//POST: /Video/Create
[HttpPost]
public ActionResult Create(VideoUploadModel VM)
{
if (ModelState.IsValid)
{
db.Videos.AddObject(VM.videoModel);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.UserId = new SelectList(db.DBUsers, "Id", "FName", VM.videoModel.UserId);
return View(VM);
}
und aus meiner Sicht habe ich
@model LifeHighlightsShoeLace.Controllers.VideoController.VideoUploadModel
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
@using (Html.BeginForm("Create", "Video", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Video</legend>
<div class="editor-label">
@Html.LabelFor(model => model.videoModel.KalturaID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.videoModel.KalturaID)
@Html.ValidationMessageFor(model => model.videoModel.KalturaID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.videoModel.Size)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.videoModel.Size)
@Html.ValidationMessageFor(model => model.videoModel.Size)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.videoModel.Date)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.videoModel.Date)
@Html.ValidationMessageFor(model => model.videoModel.Date)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.videoModel.UploadedBy)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.videoModel.UploadedBy)
@Html.ValidationMessageFor(model => model.videoModel.UploadedBy)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.videoModel.UserId, "User")
</div>
<div class="editor-field">
@Html.DropDownList("UserId", String.Empty)
@Html.ValidationMessageFor(model => model.videoModel.UserId)
</div>
<div class="editor-field">
<input name="model.vid" type="file" />
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
Wenn ich das Formular abschicken der videoModel Teil der VM ausgefüllt vid aber die eigentliche Datei ist null.
Irgendwelche Ideen?
InformationsquelleAutor der Frage Matthew Arkin | 2012-06-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update nach OP Kommentar
legen Sie die maximale Länge der Datei in der web.config-Datei
Ändern Sie die "?" auf eine Größe, die Sie möchten, um Ihre max, zum Beispiel 65536 64 MB
Können Sie nicht fügen Sie die Datei, um das Modell, es wird in seinem eigenen Bereich nicht Teil des Modells
Ihre Aktion ist falsch. Es muss akzeptieren, dass die Datei als eigenen parameter (oder, wenn mehrere verwenden
IEnumerable<HttpPostedFileBase>
als parameter-Typ)Wenn Sie waren, so dass mehrere Dateien ausgewählt werden, die Sie haben, um zu ermöglichen, dass
InformationsquelleAutor der Antwort CD Smith
Der Grund, warum es nicht verbindlich ist, weil der binder Modell sieht nur
QueryString
Form
undRouteData
beim binden ein Komplexes Modell wie deins. Die Art und Weise, dies zu umgehen, ist ein weiterer parameter im action-Methode. (ändern Sie Ihre "Namen" nur "vid")InformationsquelleAutor der Antwort Buildstarted
Funktioniert bei mir:
Controller:
Anzeigen:
Ich denke, dass die Lösung dort platziert:
Model.File
~<input name="File"/>
InformationsquelleAutor der Antwort AZIP
ändern
zu
je nachdem, was sonst noch auf Ihrer Seite, und wo die view gerendert wird, die MVC generiert eindeutige ID ist, denke ich, dass Ihr hart codiert-ID ist nicht korrekt mit dem Formular verknüpften Felder.
InformationsquelleAutor der Antwort Jason Kulatunga