Ich habe eine Razor-Seite, wo ich einige Daten (nicht in einem Formular) laden und eines dieser "Felder" ist eine Datei.Datei von ViewBag laden?
<div class="col-sm-3">
<label>Upload Construction Map:</label>
<br />
<div class="input-group">
<span class="input-group-btn">
<span class="btn btn-primary btn-file">
Browse @Html.TextBoxFor(m => m.ShapeFileModel.ConstructFile, new { id = "fu-construct", type = "file", accept = ".pdf" })
</span>
</span>
@{
if (fileId != "")
{
int theId = int.Parse(fileId);
CrossCData.DAL.File fileMap = (from f in dbCrossingsCloud.Files
where f.Id == theId
select f).SingleOrDefault();
<input type="text" id="txtPathConstruct" class="form-control" value="@fileMap.FileName" contenteditable="false" readonly />
}
else
{
<input type="text" id="txtPathConstruct" class="form-control" value="" contenteditable="false" readonly />
}
}
</div>
</div>
Ich kehre in ViewBag.fileId die ID der Datei, dann habe ich die Details der Datei erhalten, die in einem Dateisystem gespeichert wird (nicht-Datenbank). Also ... Dateipfad (Ordnerpfad) und Dateiname.
Ist es möglich, IO in Razor zu verwenden, um eine Datei auf den Eingang zu laden? und zu einer Javascript-Variable?
Jede Hilfe wird geschätzt!
Javascript Ich verwende die Datei
$("#fu-construct").fileupload({
url: 'UploadConstructFile',
dataType: 'json',
// File was added
add: function (e, data) {
var fileExtension = ['pdf']; // Valid file extensions
if ($.inArray($("#txtPathConstruct").val().split('.').pop().toLowerCase(), fileExtension) == -1) {
swal("Error", "Only PDF files are allowed. Please select a file in PDF format.", "error");
$("#txtPathConstruct").val("No file chosen...");
constructData = null;
} else {
constructData = data;
}
},
// UploadConstructFile is done
done: function (event, data) {
fileId = data.result.fileId;
if (projectCompany == "" || typeof projectCompany == 'undefined') {
swal("Error", "Please enter a requesting company", "error");
}
else if (projectName == "" || typeof projectName == 'undefined') {
swal("Error", "Please enter a project name.", "error");
}
else if (projectType == "" || typeof projectType == 'undefined') {
swal("Error", "Please select a project type.", "error");
}
else {
post('Audit', 'post', JSON.stringify(myDataTable.rows().data().toArray()), fileId, projectCompany, projectName, projectType, projectFileNumber, projectAFECC);
}
},
fail: function (event, data) {
alert("Error uploading the file.");
$("#txtPathShape").val("No file chosen...");
}
});
$("#construct-upload").on('click', function() {
if (constructData) {
constructData.submit();
}
return false;
});
Es wird allgemein als schlechte Praxis angesehen, Daten über ViewBag zu übertragen. Ich würde vorschlagen, ein stark typisiertes View-Modell und die HttpPostedFile-Klasse als Feld zu verwenden. – JDupont
Ich habe deine Frage noch einmal gelesen. Versuchen Sie, die Datei von Ihrem Server aus bereitzustellen oder lassen Sie den Benutzer die Datei auf den Server hochladen? Wenn es der spätere (* Client sendet Datei an Server *) ist meine Antwort nicht korrekt, aber ich kann es mit meiner Empfehlung neu schreiben. – Igor
Der Benutzer lädt die Datei hoch und sobald sie in Add.cshtml eingegeben haben, speichere ich sie auf dem Server, dann möchte der Benutzer aus der Audit.cshtml-Datei zurückgehen und die Informationen reparieren, aber ich muss die Datei erneut in 'constructData' laden in Javascript. –