2013-10-18 33 views
1

Im新的MVC和我有這個問題,請幫助我, 當我嘗試上傳圖像到我的網站項目,此錯誤出現 「沒有類型爲'IEnumerable'的ViewData項具有'TagId'鍵。」 這是我的視圖模型:有沒有ViewData項的類型'IEnumerable <SelectListItem>'有關鍵'TagId'

@model ImageSharingWithAuth.Models.ImageView 

@{ 
    ViewBag.Title = "Upload an Image"; 
} 

<h2>@ViewBag.Title </h2> 

@{Html.BeginForm("Upload", "Images", FormMethod.Post, new {enctype ="multipart/form-data"});} 

<fieldset> 
    <legend > 
     Enter Image Information 
    </legend> 
     @Html.AntiForgeryToken() 

    <p> 
     Caption: @Html.TextBoxFor(model=>model.Caption) 
       @Html.ValidationMessage("Caption") 

    </p> 
    <p> 

     Select a tag : @Html.DropDownListFor(model=>model.TagId , ViewBag.Tags as SelectList) 

    </p> 
    <p> 
     Description :<br /> 
     @Html.TextAreaFor(model=> model.Description,5,40,null) 
       @Html.ValidationMessage("Description") 

    </p> 
    <p> 

     Date taken: @Html.TextBoxFor(model=>model.DateTaken) 
       @Html.ValidationMessage("DateTaken") 


    </p> 
    <p> 
     <input type="file" name="ImageFile" /> 
    </p> 
    <p> 
    <input type="submit" value="Upload" /> 

    </p> 
</fieldset> 

<p>@ViewBag.Message</p> 
<p> @Html.ValidationSummary() </p> 
@{Html.EndForm(); } 

這是獲取和上傳設置:

private ImageSharingDB db = new ImageSharingDB(); 
     [HttpGet] 
     public ActionResult Upload() 
     { 

      CheckAda(); 

      //string userid = GetLoggedInUser(); 
      //if (userid == null) { 
      // return ForceLogin(); 
      //} 
      //else 

      { 
       ViewBag.Message = ""; 
       //IEnumerable<Tag> tags = db.Tags; 

       ViewBag.Tags = new SelectList(db.Tags, "Id", "Name",1); 


       return View(); 
      } 
     } 
     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Upload(ImageView image, HttpPostedFileBase ImageFile) 
     { 

      CheckAda(); 
      TryUpdateModel(image); 


      if (ModelState.IsValid) 
      { 
       String userid = GetLoggedInUser(); 
       //if (userid != null) 
       //{ 
       // return ForceLogin(); 
       //} 
       //else 

        User user = db.Users.SingleOrDefault(u => u.Userid.Equals(userid)); 

        if (user != null) 
        { 


         // save image info on the db 


         Image imageEntity = new Image(); 
         imageEntity.Id = image.Id; 
         imageEntity.Caption = image.Caption; 
         imageEntity.Description = image.Description; 
         imageEntity.DateTaken = image.DateTaken; 

         imageEntity.Approved = false; 
         imageEntity.User = user; 
         imageEntity.TagId = image.TagId; 


         if (ImageFile != null && ImageFile.ContentLength > 0) 
         { 
          db.Images.Add(imageEntity); 
          db.SaveChanges(); 
          String imgFileName = Server.MapPath("~/Content/Images/img-"+imageEntity.Id+".jpg"); 
          ImageFile.SaveAs(imgFileName); 

          return View("Details", image); 

          //return RedirectToAction("Details", imageEntity.Id); 
         } 
         else 
         { 
          ViewBag.Message = "No such image file specified"; 
          return View(); 
         } 


        } 
        else 
        { 
         ViewBag.Message = "No Scuh userid registered"; 
         return View(); 

        } 



      } 
      else 
      { 
       ViewBag.Message = "Please crrect the errorsin the form!"; 
       return View(); 
      } 

     } 

這個模型的ImageView:

namespace ImageSharingWithAuth.Models 
{ 
    public class ImageView 
    { 

     [Required] 
     [StringLength(40)] 
     public String Caption { get; set; } 
     [Required] 
     public int TagId { get; set; } 
     [Required] 
     [StringLength(200)] 
     public String Description { get; set; } 
     [Required] 
     [DataType(DataType.Date)] 
     [DisplayFormat(DataFormatString = "{0:d}",ApplyFormatInEditMode=true)] 
     public DateTime DateTaken { get; set; } 

     [ScaffoldColumn(false)] 
     public int Id; 
     [ScaffoldColumn(false)] 
     public String Userid { get; set; } 
     [ScaffoldColumn(false)] 
     public String TagName { get; set; } 





    } 
} 

和圖像模式:

namespace ImageSharingWithAuth.Models 
{ 
    public class Image 
    { 

     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public virtual int Id {get;set;} 
     [MaxLength(40)] 
     public virtual string Caption { get; set; } 
     [MaxLength(200)] 
     public virtual string Description { get; set; } 
     [DataType(DataType.Date)] 
     [DisplayFormat(DataFormatString = "{0:d}")] 
     public virtual DateTime DateTaken { get; set; } 

     public virtual bool Approved { get; set; } 

     [ForeignKey("User")] 

     public virtual int UserId { get; set; } 
     public virtual User User { get; set; } 

     [ForeignKey("Tag")] 
     public virtual int TagId { get; set; } 
     public virtual Tag Tag { get; set; } 

     public Image() { 
      Approved = false; 
     } 
    } 

} 
+0

你也需要在你的'[httppost]'中把值放到'ViewBag.Tags'中。 – AthibaN

回答

1

在httpPost的else塊中試試這個控制器的方法

else 
      { 
       ViewBag.Message = "Please crrect the errorsin the form!"; 
       ViewBag.Tags = new SelectList(db.Tags, "Id", "Name",1); 
       return View(); 
      } 
相關問題