Ich habe einen Formular-Upload, der funktioniert, aber ich möchte Modellinformationen für meine Datenbank übergeben, um die Datei natürlich unter einem anderen Namen zu speichern.
Hier ist meine Rasiermesseransicht:
@model CertispecWeb.Models.Container
@{
ViewBag.Title = "AddDocuments";
}
<h2>AddDocuments</h2>
@Model.ContainerNo
@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
<input type='file' name='file' id='file' />
<input type="submit" value="submit" />
}
Hier ist mein Controller:
[HttpPost]
public ActionResult Uploadfile(Container containers, HttpPostedFileBase file)
{
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"),
containers.ContainerNo);
file.SaveAs(path);
}
return RedirectToAction("Index");
}
Die Modellinformationen werden nicht an die Steuerung weitergegeben. Ich habe gelesen, dass ich das Modell möglicherweise aktualisieren muss. Wie würde ich das tun?
asp.net-mvc
asp.net-mvc-3
razor
Francis
quelle
quelle
Antworten:
Ihr Formular enthält kein anderes Eingabe-Tag als die Datei, sodass Sie in Ihrer Controller-Aktion nicht erwarten können, dass Sie etwas anderes als die hochgeladene Datei erhalten (das ist alles, was an den Server gesendet wird). Eine Möglichkeit, dies zu erreichen, besteht darin, ein verstecktes Tag mit der ID des Modells einzuschließen, mit dem Sie es aus Ihrem Datenspeicher innerhalb der Controller-Aktion abrufen können, an die Sie senden (verwenden Sie diese Option, wenn der Benutzer das Modell nicht ändern soll, aber einfach eine Datei anhängen):
und dann in Ihrer Controller-Aktion:
Wenn Sie dem Benutzer jedoch erlauben möchten, dieses Modell zu ändern, müssen Sie die richtigen Eingabefelder für jedes Feld Ihres Modells einfügen, das an den Server gesendet werden soll:
Anschließend wird der Standardmodellordner dieses Modell aus der Anforderung rekonstruieren:
quelle
file
alsnull
undRequest.Files.Count
ist auch 0, würde es einen Unterschied geben, wenn das einform
istAjaxForm
und es auch gibtrouteValues
?Gelöst
Modell
Regler
Und ansehen
Beachten Sie, dass der Titel des Parameters aus der Controller-Aktion mit dem Namen der Eingabeelemente übereinstimmen muss
IEnumerable<HttpPostedFileBase> fileUpload
->name="fileUpload[0]"
fileUpload
muss passenquelle
Wenn Sie nicht immer Bilder für Ihre Aktion veröffentlichen, können Sie Folgendes tun:
quelle
Für mehrere Dateien; Beachten Sie das neuere " multiple " Attribut für die Eingabe:
Bilden:
Regler:
quelle
1. Laden Sie die Datei jquery.form.js von der folgenden URL herunter
http://plugins.jquery.com/form/
Schreiben Sie den folgenden Code in cshtml
Aktionsmethode: -
quelle