2016-12-07 4 views
0

Wie kann ich eine Datei mit zusätzlichen Daten in ASP.NET MVC hochladen? Das ist, was ich habe, so weit:Wie Sie Dateien mit zusätzlichen Daten in ASP.NET MVC hochladen

@using (Html.BeginForm("CreateSiteLogo", "SiteSettings", FormMethod.Post)) 
{ 
    @Html.TextBoxFor(a=>a.SiteNameKey) 

    <input type="file" name="logo" id="logo" /> 
    <input type="submit" /> 
} 

Aktion:

[HttpPost] 
public ActionResult CreateSiteLogo(SiteSettingsAPIModel siteSetting) 
{ 
    // Handle model 
} 

Modell:

public class SiteSettingsAPIModel 
{ 
    public int Id { get; set; } 
    public string SiteNameKey { get; set; } 
    public byte[] SiteLogo { get; set; } 
    public string ImageFormat { get; set; } 
} 

Ich kann nur den Wert des Eingangs [text] erhalten, aber nicht die Eingangs [Datei]. Ich habe versucht, Request.Files[0] zu verwenden, aber ich bekomme immer Null.

+0

anzeigen Code des Modells. – Mairaj

+0

Haben Sie einen Haltepunkt auf Ihrem 'ActionResult' gesetzt, um zu sehen, ob die Datei durchkommt? – Izzy

+0

Ein besserer Ansatz wäre es, der Dateieingabe einen Onchange-Listener hinzuzufügen, die Datei durch Ajax zu posten und den Dateinamen als den zu speichern, den er gespeichert hat. Dann könnten Sie den Dateinamen dem Modell –

Antwort

1

Diese helfen könnte:

@model SandBox.Web.Models.SiteSettingsAPIModel 
@using (Html.BeginForm("CreateSiteLogo", "SiteSettings", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.TextBoxFor(a => a.SiteNameKey) 

    <input type="file" name="SiteLogo" id="logo" /> 
    <input type="submit" /> 
} 

public class SiteSettingsAPIModel 
{ 
    public int Id { get; set; } 
    public string SiteNameKey { get; set; } 
    public HttpPostedFileBase SiteLogo { get; set; } 
    public string ImageFormat { get; set; } 
} 
3

Wenn Sie Datei-Upload in View verwenden, dann müssen Sie die enctype = "multipart/form-data" in Begin

@using (Html.BeginForm("CreateSiteLogo", "SiteSettings", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.TextBoxFor(a => a.SiteNameKey) 

    <input type="file" name="logo" id="logo" /> 
     <input type="submit" /> 
} 

und in der Controller-Seite angeben,

public ActionResult CreateSiteLogo(SiteSettingsAPIModel siteSetting, HttpPostedFileBase logo) 
    { 
     //Getting the file path 
     string path = Server.MapPath(logo.FileName); 

     //getting the file name 
     string filename = System.IO.Path.GetFileName(logo.FileName); 
     using (var binaryReader = new BinaryReader(logo.InputStream)) 
     { 
      fileContent = binaryReader.ReadBytes(logo.ContentLength); 
     } 
     siteSetting.SiteLogo = fileContent; 

     return View(); 
    } 

der Controller Code soll entsprechend Ihrer Anforderung geändert werden. Hoffe, dass seine hilfreich

+0

Vielen Dank :) Allerdings stellt sich heraus, ich muss den Typ des Logos von Byte-Array zu http veröffentlichten Datei Basis ändern. Auf diese Weise muss ich meiner Aktion keinen zweiten Parameter hinzufügen. Nochmals vielen Dank: D – user3159792

Verwandte Themen