eCommerce Website Part 20 Sub Categories

   eCommerce Website  Part 20 Sub Categories

Hi, Dear's here we learn how to implement eCommerce Website in Visual Studio using C# ASP.NET MVC. Ilyasoft software company provide full project step by step training on our YouTube Channel ilyasoft software company so now subscribe, share and like for more project base tutorials


In this video we are going to implement Sub Categories for more details click here: watch vedio

> SubCategoryMV Code : 

public class SubCategoryMV
    {
        public int Sub_CategoryID { get; set; }
        public string Sub_CategoryTitle { get; set; }
        public string CreatedBy { get; set; }
        public string CreatedDateTime { get; set; }
        public string Status { get; set; }
    }

> Reg_SubCategoryMV Code : 

public class Reg_SubCategoryMV
    {
        public Reg_SubCategoryMV()
        {
            List_Status = new List<StatusMV>();
            foreach (var status in new DatabaseLayer.Pro_EcommerceDbEntities().StatusTables.ToList())
            {
                List_Status.Add(new StatusMV()
                {
                    StatusID = status.StatusID,
                    StatusTitle = status.StatusTitle
                });
            }

            List_SubCategories = new List<SubCategoryMV>();
            foreach (var category in new DatabaseLayer.Pro_EcommerceDbEntities().SubCategoryTables.ToList())
            {
                var createdby = new DatabaseLayer.Pro_EcommerceDbEntities().UserTables.Find(category.CreatedBy_UserID);
                var status = new DatabaseLayer.Pro_EcommerceDbEntities().StatusTables.Find(category.StatusID);
                var adddatetime = category.CreatedDate + category.CreatedTime;
                List_SubCategories.Add(new SubCategoryMV()
                {
                    Sub_CategoryID = category.Sub_CategoryID,
                    Sub_CategoryTitle = category.Sub_CategoryTitle,
                    CreatedBy = createdby.UserName,
                    CreatedDateTime = adddatetime.ToString(),
                    Status = status.StatusTitle
                });
            }

        }
        public Reg_SubCategoryMV(int? id)
        {
            List_Status = new List<StatusMV>();
            foreach (var status in new DatabaseLayer.Pro_EcommerceDbEntities().StatusTables.ToList())
            {
                List_Status.Add(new StatusMV() { 
                    StatusID = status.StatusID, 
                    StatusTitle = status.StatusTitle
                });
            }

            List_SubCategories = new List<SubCategoryMV>();
            foreach (var category in new DatabaseLayer.Pro_EcommerceDbEntities().SubCategoryTables.ToList())
            {
                var createdby = new DatabaseLayer.Pro_EcommerceDbEntities().UserTables.Find(category.CreatedBy_UserID);
                var status = new DatabaseLayer.Pro_EcommerceDbEntities().StatusTables.Find(category.StatusID);
                var adddatetime = category.CreatedDate + category.CreatedTime;
                List_SubCategories.Add(new SubCategoryMV()
                {
                    Sub_CategoryID = category.Sub_CategoryID,
                    Sub_CategoryTitle = category.Sub_CategoryTitle,
                    CreatedBy = createdby.UserName,
                    CreatedDateTime = adddatetime.ToString(),
                    Status = status.StatusTitle
                });
            }

            var editcategory = new DatabaseLayer.Pro_EcommerceDbEntities().SubCategoryTables.Find(id);
            if (editcategory != null)
            {
                Sub_CategoryID = editcategory.Sub_CategoryID;
                Sub_CategoryTitle = editcategory.Sub_CategoryTitle;
                StatusID = editcategory.StatusID;
            }
            else
            {
                Sub_CategoryID = 0;
                Sub_CategoryTitle = string.Empty;
                StatusID = 0;
            }

        }
        public int Sub_CategoryID { get; set; }

        [Required(ErrorMessage = "Required*")]
        [Display(Name = "Sub Category")]
        public string Sub_CategoryTitle { get; set; }

        [Required(ErrorMessage = "Required*")]
        [Display(Name = "Status")]
        public int StatusID { get; set; }
        public virtual List<SubCategoryMV> List_SubCategories { get; set; }
        public virtual List<StatusMV> List_Status { get; set; }
    }

> SubCategory Action Code :  
   add below code. 

public ActionResult SubCategory(int? id)
        {
            var category = new Reg_SubCategoryMV(id);
            return View(category);
        }
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult SubCategory(Reg_SubCategoryMV subCategory)
        {
            if (string.IsNullOrEmpty(Convert.ToString(Session["UserID"])))
            {
                return RedirectToAction("Login", "User");
            }
            int userid = 0;
            int.TryParse(Convert.ToString(Session["UserID"]), out userid);

            if (ModelState.IsValid)
            {
                if (subCategory.Sub_CategoryID == 0)
                {
                    var checkexist = DB.SubCategoryTables.Where(c => c.Sub_CategoryTitle == subCategory.Sub_CategoryTitle).FirstOrDefault();
                    if (checkexist == null)
                    {
                        var createcategory = new SubCategoryTable();
                        createcategory.Sub_CategoryTitle = subCategory.Sub_CategoryTitle;
                        createcategory.StatusID = subCategory.StatusID;
                        createcategory.CreatedDate = DateTime.Now.Date;
                        createcategory.CreatedTime = DateTime.Now.TimeOfDay;
                        createcategory.CreatedBy_UserID = userid;
                        DB.SubCategoryTables.Add(createcategory);
                        DB.SaveChanges();
                        return RedirectToAction("SubCategory", new { id = 0 });
                    }
                    else
                    {
                        ModelState.AddModelError("Sub_CategoryTitle", "Already Added!");
                    }
                }
                else
                {
                    var checkexist = DB.SubCategoryTables.Where(c => c.Sub_CategoryTitle == subCategory.Sub_CategoryTitle && c.Sub_CategoryID != subCategory.Sub_CategoryID).FirstOrDefault();
                    if (checkexist == null)
                    {
                        var editcategory = DB.SubCategoryTables.Find(subCategory.Sub_CategoryID);
                        editcategory.Sub_CategoryTitle = subCategory.Sub_CategoryTitle;
                        editcategory.StatusID = subCategory.StatusID;
                        editcategory.CreatedBy_UserID = userid;
                        DB.Entry(editcategory).State = System.Data.Entity.EntityState.Modified;
                        DB.SaveChanges();
                        return RedirectToAction("SubCategory", new { id = 0 });
                    }
                    else
                    {
                        ModelState.AddModelError("Sub_CategoryTitle", "Already Added!");
                    }
                }
            }
            return View(subCategory);
        }

 > SubCategory View Code : 

@model eCommerceUI.Models.Reg_SubCategoryMV
@{
    ViewBag.Title = "Categories";
}
<div class="container">
    <div class="page-width">
        @using (Html.BeginForm())
        {
            @Html.AntiForgeryToken()
            <hr />
            <h3 class="docs-title text-center">Sub Category</h3>
            <div class="form-horizontal">
                @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                @Html.HiddenFor(model => model.Sub_CategoryID)
                <div class="row" style="margin-left:1px;">
                    <div class="form-group col-md-3">
                        @Html.LabelFor(model => model.Sub_CategoryTitle, "Enter Sub Category Title", htmlAttributes: new { @class = "control-label" })
                        @Html.EditorFor(model => model.Sub_CategoryTitle, new { htmlAttributes = new { @class = "form-control" } })
                        @Html.ValidationMessageFor(model => model.Sub_CategoryTitle, "", new { @class = "text-danger" })
                    </div>

                    <div class="form-group col-md-3">
                        @Html.LabelFor(model => model.StatusID, "Select Status", htmlAttributes: new { @class = "control-label" })
                        @Html.DropDownList("StatusID", new SelectList(Model.List_Status, "StatusID", "StatusTitle", Model.StatusID), "--Choose--", htmlAttributes: new { @class = "form-control" })
                        @Html.ValidationMessageFor(model => model.StatusID, "", new { @class = "text-danger" })
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-md-offset-2 col-md-10">
                        @if (Model.Sub_CategoryID == 0)
                        {
                            <input type="submit" value="Create" class="btn btn--secondary" />
                        }
                        else
                        {
                            <input type="submit" value="Update" class="btn btn--secondary" />
                        }
                    </div>
                </div>
            </div>

        }
        <hr />
        <h3 class="docs-title">Sub Categories List</h3>
        <form autocomplete="off">
            <p>
                <div style="float:right;">
                    <input type="text"
                           style="background-image: url('@Url.Content("~/Content/Template/images/searchicon.png")');
                           background-position: 10px 5px;
                           background-repeat: no-repeat;
                           font-size: 16px;
                           padding: 12px 20px 12px 40px;
                           border: 1px solid #ddd;
                           margin-bottom: 12px; "
                           class="search form-control"
                           id="myInput"
                           placeholder="What you looking for?">
                </div>
            </p>
        </form>

        <div class="table">
            <table class="responsive-table">
                <thead>
                    <tr>
                        <td>#Unique No</td>
                        <td>Sub Category</td>
                        <td>Created Date Time</td>
                        <td>Create By</td>
                        <td>Status</td>
                        <th>Action</th>
                    </tr>
                </thead>
                <tbody id="myTable">
                    @foreach (var item in Model.List_SubCategories)
                    {
                        <tr class="responsive-table-row">
                            <td>#@Html.DisplayFor(modelItem => item.Sub_CategoryID)</td>
                            <td>@Html.DisplayFor(modelItem => item.Sub_CategoryTitle)</td>
                            <td>@Html.DisplayFor(modelItem => item.CreatedDateTime)</td>
                            <td>@Html.DisplayFor(modelItem => item.CreatedBy)</td>
                            <td>
                                @if (item.Status == "Visible")
                                {
                                    <span class="label label--new mb-3 mr-3 text-nowrap">
                                        @Html.DisplayFor(modelItem => item.Status)
                                    </span>
                                }
                                else
                                {
                                    <span class="label label--sale mb-3 mr-3 text-nowrap">
                                        @Html.DisplayFor(modelItem => item.Status)
                                    </span>
                                }

                            </td>
                            <td>
                                @Html.ActionLink("Edit", "SubCategory", new { id = item.Sub_CategoryID }, new { @class = "btn" })
                            </td>
                        </tr>
                    }
                <tbody>
            </table>
        </div>

    </div>
</div>