2013-10-09 125 views
0

我已經開始與MVC4 + EF工作,面臨着圖片上傳的問題: 我要保存的圖像路徑數據庫,但實際文件~/App_Data/傳遞多個對象,控制器MVC

我需要將「HttpPostedFileBase」和我的自定義「Image」對象傳遞給「Create」控制器。我創建了一個類「ImageUpload」來傳遞這兩個對象。

Image」 類:

public class Image 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Path { get; set; } 
    public int DepartmentId { get; set; } 
} 

「ImageUpload」 類:

public class ImageUpload 
{ 
    public Image image { get; set; } 
    public HttpPostedFileBase file { get; set; } 
} 

查看:

@model MvcBannikov.Models.ImageUpload 

    @using (Html.BeginForm("Create", "Image", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
     @Html.ValidationSummary(true) 

     <fieldset> 
      <legend>New Photo</legend> 

      <div class="editor-label"> 
       <p>Name:</p> 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.image.Name) 
       @Html.ValidationMessageFor(model => model.image.Name) 
      </div> 

      <div class="editor-label"> 
       <p>Path:</p> 
      </div> 
      <div class="editor-field"> 
       @Html.TextBoxFor(model => model.file, new { type = "file" }) 
       @Html.ValidationMessageFor(model => model.file) 
      </div> 

      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 
    } 

Create」 的方法:

[HttpPost] 
public ActionResult Create(ImageUpload image) 
{ 
    ...................... 
} 

的問題是,ImageUpload對象是NULL:(((

我之所以需要一個文件和圖像類是Image類有一個部門ID - 我需要id

也許你知道另一個解決方案如何將文件一起傳遞給DepartmentId

謝謝你的幫助

回答

0

創建一個額外的圖層,使它成爲你的ViewModel。 而不是這個類設置你需要處理的各個領域,如:影像類等 而這個視圖模型分配給你查看你的MVC的「模式」

PS 該解決方案只給你的想​​法如何一次處理多個模型。但是它不包括你的模型的正確性

+0

謝謝你的回覆。我的ImageUpload類是作爲某種ViewModel創建的,我想我理解了這個基本思想,但它不適用於我創建的代碼。我爲這個「Create」動作創建了一個強類型的視圖,但它仍然是NULL。也許在我的觀點問題? – user1274184

0

試試這個,只要改變你的控制器只使用你的Image模型,並從Request對象讓你的文件

控制器:

[HttpPost] 
public ActionResult Create(Image image) 
{ 
    HttpPostedFileBase myFile = Request.Files["file"]; 
    ...................... 
} 

沒有檢查代碼,但我記得這樣做過一次。

+0

感謝您的回覆,但在這種情況下myFile爲空。儘管你的答案幫助了我。我可以從 Uri uri = Request.Url; uri在這種情況下== http:// localhost:18388/Image/Create?departmentId = 3 我可以解析這個字符串,但是有東西告訴我這是一個「壞」的方法,或者沒有? – user1274184

+0

謝謝,它適用於我。我已經爲Department Id添加了HiddenFor,現在正在獲取結果 – user1274184

相關問題