2016-03-01 45 views
0

我在做一個asp net MVC5 web應用程序。我有下一個屬性視圖模型:當模型無效時,MVC5 GetImageFromRequest爲空

public class ExampleViewModel //: IValidatableObject 
{ 
    ... 
    public string name { get; set; } 
    public string Foto { get; set; } 
    ... 
} 

我上傳的圖片中這樣的觀點:

@using (Html.BeginForm("Create", "Ingresos", FormMethod.Post, new { @encType = "multipart/form-data" })) 
{ 
    ... 

<div class="form-group"> 
    @Html.LabelFor(model => model.Foto, htmlAttributes: new { @class = "control-label col-md-3" }) 
    <div class="col-md-9"> 
     <input type="file" id="imagen" name="imagen" class="hidden" accept="image/*" /> 
      @if (Model != null && Model.Foto != null) 
      { 
       <img src="@Model.Foto" class="thumb" id="preview" /> 
      } 
      else 
      { 
       <img class="thumb" id="preview" hidden /> 
      } 
      <label class="btn btn-default" for="imagen">Examinar...</label> 
      <label id="mensajeErrorImagen"></label> 
      <br /> 
      @if (Model != null && Model.Foto != null) 
      { 
       <a id="botonEliminar" onclick="eliminarImagen()" style="cursor: pointer;">[Eliminar]</a> 
      } 
      else 
      { 
       <a id="botonEliminar" onclick="eliminarImagen()" style="cursor: pointer;"></a> 
      } 
    </div> 
</div> 

... 
} 

和Controller我得到這樣

public ActionResult Create(ExampleViewModel ivm){ 
    WebImage imagenW = WebImage.GetImageFromRequest(); 
    if (imagenW != null) 
    { 
     ivm.Foto = "data:image/png;base64," + Convert.ToBase64String(imagenW.GetBytes()); 
    } 
    if (Model.IsValid){ 
    //do something... 
    } 
    return (View(ivm)) 
} 
圖像

當模型有效時,這適用於我。當模型無效時,圖像將在視圖中加載,但在控制器imagenW中爲空。 發生了什麼事?

編輯

發生錯誤的詩情如下:

  1. 我完成了與圖像的形式和領域的一些錯誤,我提交。
  2. 該視圖顯示錯誤消息和上傳圖像的預覽。
  3. 我在沒有變化的情況下再次提交表單。
  4. 該視圖再次顯示相同的錯誤消息,但是這次圖像的預覽是空的。

imagenW爲空連續第二次在表單中發生驗證錯誤。

回答

1

,因爲這個錯誤後 的第二時間纔會出現,所以你必須將它保存在某個地方像隱藏字段

@Html.HiddenFor(x=> x.Foto); 

你必須檢查Model.Foto == null然後從imagenW其他 從讀讀Model.Foto

代碼會

public ActionResult Create(ExampleViewModel ivm){ 
      if(ivm.Foto ==null){ 
       WebImage imagenW = WebImage.GetImageFromRequest(); 
       if (imagenW != null) 
       { 
        ivm.Foto = "data:image/png;base64," + Convert.ToBase64String(imagenW.GetBytes()); 
       } 
      } 
      if (Model.IsValid){ 
      //do something... 
      } 
      return (View(ivm)) 
     }