2014-10-30 2 views
0

У меня есть trry/catch с addModelError. Но сейчас он показывает. И да, я поставил точку останова на этой линии, и она достигла линии, но теперь показывается.Modelstate. AddmodelError не отображается

вот actioni metthod:

[HttpPost]   
     public ActionResult EditPhotos(ImageUploadModel ImageUpload) 
     { 
      var validImageTypes = new string[] 
      { 
     "image/gif", 
     "image/jpeg", 
     "image/pjpeg", 
     "image/png" 
      }; 
      try 
      { 

       if (ImageUpload.file == null && ImageUpload.file.ContentLength == 0) 
       { 
        ModelState.AddModelError("file", "This field is required"); 

       } 


       else if (!validImageTypes.Contains(ImageUpload.file.FileName.Substring(ImageUpload.file.FileName.LastIndexOf('.')))) 
       { 
        ModelState.AddModelError("file", "Please upload Your Photo of type: " + string.Join(", ", validImageTypes)); 
        return View(ImageUpload);     
       } 

       else if (ImageUpload.file != null && ImageUpload.file.ContentLength > 0) 
       { 
        var DirSeparator = Path.DirectorySeparatorChar; 
        var fileName = Path.GetFileName(ImageUpload.file.FileName); 
        //var fileName2 = Path.GetFileName(@"\\Cyclist3.jpg"); 
        var path = Server.MapPath(@"\\Images\\profile" + DirSeparator + fileName.Replace('+', '_')); 
        ImageUpload.file.SaveAs(path); 
        ViewBag.Message = "File has been uploaded successfully"; 
        ModelState.Clear(); 
       } 


      } 
      catch (FileLoadException ex) 
      { 

       throw; 
      } 



      if (ModelState.IsValid) 
      { 
       string username = User.Identity.Name; 
       // Get the userprofile 
       UserProfile user = db.userProfiles.FirstOrDefault(u => u.UserName.Equals(username)); 

       // Update fields 

       byte[] uploadedFile = new byte[ImageUpload.file.ContentLength];    
       ImageUpload.file.InputStream.Read(uploadedFile, 0, ImageUpload.file.ContentLength); 
       user.file = uploadedFile; 
       user.ImageMimeType = ImageUpload.file.ContentType; 

       db.Entry(user).State = EntityState.Modified; 

       try 
       { 
        db.SaveChanges(); 
       } 
       catch (DbEntityValidationException e) 
       { 
        foreach (var eve in e.EntityValidationErrors) 
        { 
         Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", 
          eve.Entry.Entity.GetType().Name, eve.Entry.State); 
         foreach (var ve in eve.ValidationErrors) 
         { 
          Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", 
           ve.PropertyName, ve.ErrorMessage); 
         } 
        } 
        throw; 
       } 

      } 

      return RedirectToAction("Edit", routeValues: new { controller = "Account", activetab = "tabs-2" }); 
     } 

и это мнение:

<div class="lifile"> 
        <div id="upload-choices"> 
         <div class="editor-label"> 


          @Html.ValidationMessageFor(model => model.file) 

         </div> 

        </div> 
        </div> 

так для exmaple этого:

{ 
         ModelState.AddModelError("file", "Please upload Your Photo of type: " + string.Join(", ", validImageTypes)); 
         return View(ImageUpload);     
        } 

я поставил точку останова на AddModelError и он достигает этой строки, но ошибка не отображается.

Спасибо

Я попытался это:

Вид:

<div class="lifile"> 
        <div id="upload-choices"> 
         <div class="editor-label"> 


          @Html.ValidationMessageFor(model => model.file) 
          @Html.ValidationSummary(true) 

         </div> 

        </div> 
        </div> 

метод Действие

else if (!validImageTypes.Contains(ImageUpload.file.ContentType)) 
       { 
        ModelState.AddModelError(string.Empty, "Please choose either a GIF, JPG or PNG image."); 
        return View(ImageUpload); 

       } 
+0

проверить это: http: //stackoverflow.com/questions/2818219/asp-net-mvc-html-validationsummarytrue-does-not-display-model-errors –

+0

Благодарим вас за ваше оповещение, см. Мой пост редактирования, см. мой пост обновления –

+0

jQuery был бы лучшим вариантом для того, чего вы пытаетесь достичь. – Coder

ответ

0

Я считаю, что ModelStateDictionary не плетутся на вашем RedirectResult, вы должны вернуть ViewResult.

Если вы положили точку останова на строку AddModelError, эта строка еще не будет выполнена. Поместите точку останова на следующую строку, и там должна быть ошибка.

+0

Спасибо за ваш комментарий, но у меня только есть viewmodel: ImageUploadModel ImageUpload, но если я верну это: view (ImageUpload) does not work –

Смежные вопросы