2016-03-30 3 views
0

Ich habe den Code viele Kontrollkästchen aus meinem Tisch zu zeigen (HairTags) und in meiner Form CreationUpload.cshtml bekam ich folgende Fehlermeldung:Fehler in meiner Upload-Seite, nachdem ich mein Modell geändert

Eine Ausnahme des Typs ‚System .NullReferenceException 'trat in App_Web eba142hb.dll auf, wurde aber nicht im Benutzercode behandelt. Zusätzliche Informationen Information: Objektreferenz wurde nicht auf eine Instanz eines Objekts gesetzt.

Objektverweis nicht auf eine Instanz eines Objekts festgelegt.

<div class="col-md-12"> 
       @for (int i = 0; i < Model.CreationHairTags.Count; i++) 
       { 
        @Html.CheckBoxFor(m => Model.CreationHairTags[i].IsChecked) 
        @Model.CreationHairTags[i].Text 
        @Html.HiddenFor(m => Model.CreationHairTags[i].Value) 
        @Html.HiddenFor(m => Model.CreationHairTags[i].Text)<br /> 
       } 
      </div> 

das ist mein Modell Creation.cs (fett dem zusätzlichen Code)

namespace HairCollection3.Models 
{ 
    public class Creation 
    { 
     public string UserId { get; set; } 
     [Key] 
     public int CreationId { get; set; } 

     [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ViewRes.ValidationStrings))] 
     [Display(Name = "Sex", ResourceType = typeof(ViewRes.Names))] 
     public string CreationSex { get; set; } 

     [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ViewRes.ValidationStrings))] 
     [Display(Name = "CreationTitle", ResourceType = typeof(ViewRes.NamesCreation))] 
     [StringLength(2000)] 
     [AllowHtml] 
     public string CreationTitle { get; set; } 


     public string CreationPhotoBis { get; set; } 


     public string Creationtag { get; set; }   

     public virtual ICollection<CreationLike> CreationLikes { get; set; } 

    } 

    public class CreationLike 
    { 
     public int CreationId { get; set; } 
     public string UserId { get; set; } 
     public virtual ApplicationUser User { get; set; } 
     [Key] 
     public int CreationLikeId { get; set; } 

     public virtual Creation ParentCreation { get; set; } 

    } 

    public class HairTag 
    { 
     [Key] 
     public int HairTagId { get; set; } 

     [Required] 
     public string HairTagTitle { get; set; } 

     [Required] 
     public string HairTagType { get; set; } 

     [Required] 
     public int HairTagOrder { get; set; } 

    } 



    ***//CHECKBOXES 
    public class HairTagModel 
    { 
     [Key] 
     public int Value { get; set; } 
     public string Text { get; set; } 
     public bool IsChecked { get; set; } 
    } 

    public class HairTagList 
    { 
     private ApplicationDbContext creationdb = new ApplicationDbContext(); 

     public HairTagList() 
     { 
      var HairTagList = creationdb.HairTags.ToList(); 

      List<HairTagModel> obj = new List<HairTagModel>(); 
      foreach (var tags in HairTagList) 
      { 
       obj.Add(new HairTagModel 
       { 
        Text = tags.HairTagTitle, 
        Value = tags.HairTagId, 
        IsChecked = false 
       }); 
      } 

      this.CreationHairTags = obj; 
     } 

     public List<HairTagModel> CreationHairTags { get; set; } 

     //public List<HairTagModel> ListHairTags { get; set; } 
    } 

    public class CreationHairTagsModel 
    { 
     public Creation Creation { get; set; } 
     public List<HairTagModel> CreationHairTags { get; set; } 
    } 


}*** 

Mein Controller CreationController.cs

// GET: /Creation/CreationUpload 
     [Authorize] 
     public ActionResult CreationUpload() 
     { 
      CreationHairTagsModel creation = new CreationHairTagsModel(); 

      return View(creation); 

      //return View(); 
     } 

     // POST: /Creation/CreationUpload 
     // Afin de déjouer les attaques par sur-validation, activez les propriétés spécifiques que vous voulez lier. Pour 
     // plus de détails, voir http://go.microsoft.com/fwlink/?LinkId=317598. 
     [HttpPost] 
     [Authorize] 
     [ValidateAntiForgeryToken] 
     public ActionResult CreationUpload([Bind(Include = "CreationId,CreationSex,CreationTitle,CreationPhotoBis,CreationHairTags")] CreationHairTagsModel creation, IEnumerable<HttpPostedFileBase> files) 
     { 
      if (ModelState.IsValid) 
      { 


       // update each field manually 
       foreach (var file in files) 
       { 
        if (file != null) 
        { 
         if (file.ContentLength > 0) 
         { 

          ....CODE UPLOAD HIDDEN.... 

           //Avoid Script 
           var CreationTitletocheck = Regex.Replace(creation.Creation.CreationTitle, @"<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>", string.Empty); 
           CreationTitletocheck = Regex.Replace(CreationTitletocheck, @"(?></?\w+)(?>(?:[^>'""]+|'[^']*'|""[^""]*"")*)>", string.Empty); 
           creation.Creation.CreationTitle = CreationTitletocheck; 

           //Tags 
           StringBuilder sb = new StringBuilder(); 
           foreach (var item in creation.CreationHairTags) 
           { 
            if (item.IsChecked) 
            { 
             sb.Append(item.Text + ","); 
            } 
           } 
           creation.Creation.Creationtag = sb.ToString(); 

           creation.Creation.UserId = User.Identity.GetUserId(); 


           db.Creations.Add(creation.Creation); 
           db.SaveChanges(); 



          } 


         } 
        } 
       } 

       //UserId 
       return RedirectToAction("CreationList", "Creation", new { UserId = User.Identity.GetUserId() }); 
      } 

      return View(creation); 
     } 

Meine Seite Lade CreationUpload.cshtml

@model HairCollection3.Models.CreationHairTagsModel 
@using Microsoft.AspNet.Identity 


@{ 
    ViewBag.Title = ViewRes.NamesCreation.CreationUploadTitle; 
} 


<div class="col-sm-12 col-md-12 chpagetop"> 

    <h1>@ViewRes.Shared.PublishAPhoto</h1> 

    <hr /> 

    @using (Html.BeginForm("CreationUpload", "Creation", FormMethod.Post, new { id = "CreationUpload", enctype = "multipart/form-data", onsubmit = "$('#creationloading').show(); $('#creationform').hide();" })) 
    { 
     @Html.AntiForgeryToken() 


     <div class="col-md-12" id="creationloading" style="display:none"> 
      <div id="progress"> 
       <p>@ViewRes.Shared.UploadPhotoProgress<strong>0%</strong></p> 
       <progress value="5" min="0" max="100"><span></span></progress> 
      </div> 
     </div> 

     <div class="col-md-12" id="creationform"> 

      <div class="col-md-12"> 
       @Html.ValidationMessageFor(m => m.Creation.CreationSex) 
       @Html.RadioButtonFor(m => m.Creation.CreationSex, "F", new { @checked = true }) @ViewRes.Shared.WomanHairstyle @Html.RadioButtonFor(m => m.Creation.CreationSex, "M") @ViewRes.Shared.ManHairstyle 
      </div> 

      <div class="col-md-12"> 
       @Html.ValidationMessageFor(m => m.Creation.CreationTitle) 
       @Html.TextBoxFor(m => m.Creation.CreationTitle, new { @class = "inputplaceholderviolet wid100x100", placeholder = HttpUtility.HtmlDecode(Html.DisplayNameFor(m => m.Creation.CreationTitle).ToHtmlString()), onfocus = "this.placeholder = ''", onblur = "this.placeholder = '" + HttpUtility.HtmlDecode(Html.DisplayNameFor(m => m.Creation.CreationTitle).ToHtmlString()) + "'" }) 
      </div> 

      <div class="col-md-12"> 
       @for (int i = 0; i < Model.CreationHairTags.Count; i++) 
       { 
        @Html.CheckBoxFor(m => Model.CreationHairTags[i].IsChecked) 
        @Model.CreationHairTags[i].Text 
        @Html.HiddenFor(m => Model.CreationHairTags[i].Value) 
        @Html.HiddenFor(m => Model.CreationHairTags[i].Text)<br /> 
       } 
      </div> 

      <div class="col-md-12" style="text-align: center"> 
       <p style="display: inline-block"> 
        <input type="file" accept="image/*" onchange="loadFile(event)" name="files" id="file1" translate="yes" data-val="true" data-val-required="A File is required." class="wid100x100" /><label for="file1"></label> 
       <img id="output" style="max-width:200px;"/> 
     </p> 
      </div> 

      <div class="col-sm-12 col-md-12 chpagetopdiv"> 
       <button type="submit" title="@ViewRes.Shared.Publish"><span class="glyphicon glyphicon-share-alt"></span> @ViewRes.Shared.Publish</button> 
      </div> 

     </div> 

    } 


</div> 

Was ist falsch in meinem Code bitte helfen und erklären?

+1

Null-Referenz ist eine der am häufigsten genannten Fehlertypen auf dieser Website. Leider ist es auch ein Fehler, der nur durch Debugging, nicht durch Codeanalyse aussortiert werden kann. – Claies

Antwort

0

Wichtig:In C# muss jede Sammlung vor

Der Fehler tritt auf die zugegriffen wird, initialisiert werden, wenn Sie für den Zugriff aus dem Blick auf die Sammlung CreationHairTags versuchen, das nicht initialisiert wird. Ersetzen Sie Ihr Modell, um die Sammlung im Klassenkonstruktor zu initialisieren:

public class CreationHairTagsModel 
{ 
    public Creation Creation { get; set; } 
    public List<HairTagModel> CreationHairTags { get; set; } 

    public CreationHairTagsModel() 
    { 
     CreationHairTags = new List<HairTagModel>(); 
    } 
} 
+0

Hallo, danke für deine Antwort, in der Tat habe ich gestern dieses Problem gelöst, aber jetzt habe ich noch ein Problem herauskommen .. ich poste es hier: http://stackoverflow.com/questions/36337946/model-called-inside- another-model-result-null-wann-form-post-and-modestate-vali wenn du so nett bist, es anzuschauen und zu sehen, ob du mir sagen könntest, was das Problem ist .. danke –

Verwandte Themen