0

when i send my form and model state is valid i got error couse all the value of my form are = NULL, i would love to understand why..

Visual studio stopping me straight here :

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

and is telling me that creation.Creation.CreationTitle = NULL

Here the code

Here my model Creation.cs

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace HairCollection3.Models
{
    public class Creation
    {
        public string UserId { get; set; }
        [Key]
        public int CreationId { get; set; }
        public string CreationLanguage { 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 bool CreationVisible { get; set; }
        public bool CreationDelete { get; set; }
        public DateTime CreationDate { get; set; }
        public string CreationIpAdress { get; set; }

        public string CreationPhotoBis { get; set; }
        public string CreationPhoto750 { get; set; }
        public string CreationPhotoReal { 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 DateTime CreationLikeDate { get; set; }
        public string CreationLikeIpAdress { 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 HairTagTitleEN { get; set; }
        [Required]
        public string HairTagTitleIT { get; set; }
        [Required]
        public string HairTagTitleSP { 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 CreationHairTagsModel
    {

 public CreationHairTagsModel()
        {
            Creation = new Creation();
        }

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

        public Creation Creation { get; set; }

        private ApplicationDbContext creationdb = new ApplicationDbContext();

        public List<HairTagModel> CreationHairTags
        {
            get
            { 
                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
                    });
                }

                return obj;
            }
        }
    }


}

Here my 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)
                        {

                                     ...UPLOAD CODE HIDDEN                           
                                    creation.Creation.CreationPhotoBis = fileName200;


                                //Ipaddress
                                var ipAddress = Request.ServerVariables["REMOTE_ADDR"];

                                //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();
                                creation.Creation.CreationLanguage = ViewRes.Shared.Langue;
                                creation.Creation.CreationVisible = true;
                                creation.Creation.CreationDelete = false;
                                creation.Creation.CreationDate = DateTime.Now;
                                creation.Creation.CreationIpAdress = ipAddress;
                                creation.Creation.CreationPhotoReal = fileName; //after add

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



                            }


                        }
                    }
                }

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

            return View(creation);
        }
here my view : 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>

In my IdentityModels.cs

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Web.Mvc;

namespace HairCollection3.Models
{
    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
    public class ApplicationUser : IdentityUser
    {

        // New Fields added to extend Application User class:
        CODE USER HIDDEN

    }

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection")
        {
        }



        public DbSet<Creation> Creations { get; set; }
        public DbSet<CreationLike> CreationLikes { get; set; }
        public DbSet<HairTag> HairTags { get; set; }  

What is wrong in my code please help and explain ?

tereško
  • 58,060
  • 25
  • 98
  • 150
  • Try removing the bind prefixes. I don't see why you need them anyway. – Martin Dawson Mar 31 '16 at 17:38
  • hi, i already did, but i got the same error, all the values are empty, i keept the BIND cause i thought i could keep the values in case of return in my form(model state not valid) – Carles Amnesty Mar 31 '16 at 18:11
  • @CarlesAmnesty did you check this [Introduction to ASP.NET MVC Model Binding - An Absolute Beginner's Tutorial](http://www.codeproject.com/Articles/710776/Introduction-to-ASP-NET-MVC-Model-Binding-An-Absol)? you need to learn how Model Binding works to master ASP.NET MVC. – Balde Mar 31 '16 at 19:23
  • Hi, i will have a look, but do you know hoxw to fix this problem? Thanks – Carles Amnesty Mar 31 '16 at 20:10
  • Your model has a property named `creation` and your method also has a parameter named `creation` so model binding fails. And you should remove your acceptance of the answer in your previous question - its misleading to other users who will assume that an incorrect answer is correct –  Mar 31 '16 at 21:56
  • Thanks @Stephen Muecke, i followed your instruction, i took off the "Bind code" and changed in my controller creation to creationbind, and now is working!!Little by little i am learning.. but still i have another problem.. My checkboxes results null even if i check some of them and in my controller i did debug in my line : 'code' foreach (var item in creationbind.CreationHairTags) 'code' an all the value are = NULL but i choose 2 of them? Based on my code, do you know what is wrong? Thanks again for your help – Carles Amnesty Apr 01 '16 at 08:00
  • @CarlesAmnesty, If your having other problems, then you need to ask a new question :) - but please show only the relevant code - most of us will just ignore a question with this much code –  Apr 01 '16 at 09:05
  • Hi @Stephen Muecke, you are right.. i did it.. but unfortunatly i need to wait 90 minutes between a post and another.. i need a bit more of help, in fact i need to apply this code to my EDIT section in my controller, based on my code, how should i replace this code? : / GET: /Creation/CreationEdit/5 [Authorize] public ActionResult CreationEdit(int? id) { Creation creation = db.Creations.Find(id); return View(creation); } – Carles Amnesty Apr 01 '16 at 09:32

0 Answers0