Nicholas Mabe

Nicholas Mabe

  • NA
  • 72
  • 4.8k

Accessing the columns of a select list:

Feb 18 2022 11:35 AM

All except the ID column, the other columns and hence their values in a SelectList are not currently present in my ProposalRepository.cs. Currently only the ID is being sent. As the select list is not present in ProposalRepository.cs so I cannot get access to the columns and values I require.

My question is how do I make the values in the other columns of the SelectList available?

In this update method I am unable to access the additional fields of the select boxes, I am able to access the ID fields of the Select Boxes.

I guess I need to create an instance of the SELECTLIST that has the fields that I require in them, not just the ID field in them, but I can’t for the life of me get this to work.

Currently I have this:

var objFromDb = _db.Proposals.FirstOrDefault(s => s.ProposalId == proposal.ProposalId);
if (objFromDb != null)
{
    objFromDb.AccountId = proposal.AccountId;
    objFromDb.ArmouringId = proposal.ArmouringId;
    objFromDb.BaseUnitId = proposal.BaseUnitId;
    objFromDb.ProposalDate = proposal.ProposalDate;
    objFromDb.ProposalReference = "MEVA" + "-" + proposal.ProposalId + "-" + proposal.ProposalCategoryId + "-" + proposal.BaseUnitId;
    objFromDb.ProposalCategoryId = proposal.ProposalCategoryId;
    _db.SaveChanges();
}

I need something like this:

var objFromDb = _db.Proposals.FirstOrDefault(s => s.ProposalId == proposal.ProposalId);
if (objFromDb != null)
{
    objFromDb.AccountId = proposal.AccountId;
    objFromDb.ArmouringId = proposal.ArmouringId;
    objFromDb.BaseUnitId = proposal.BaseUnitId;
    objFromDb.ProposalDate = proposal.ProposalDate;
    objFromDb.ProposalReference = "MEVA" + "-" + proposal.ProposalId + "-" + proposal.ProposalCategoryInitials + "-" + proposal.BaseUnitInitials;
    objFromDb.ProposalCategoryId = proposal.ProposalCategoryId;
    _db.SaveChanges();
}

The column ProposalReference is made up of a concatenation of numbers and initials, it is generated through the selection made eg: ProposalID + PropoaslCatagegoryIntitials + BaseUnitIntials

The full ProposalRepository.cs file is as follows:

ProposalRepository.c

using MEVASALES.DataAccess.Data;
using MEVASALES.DataAccess.Repository;
using MEVASALES.DataAccess.Repository.IRepository;
using MEVASALES.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MEVASALES.DataAccess.Repository
{
    public class ProposalRepository : Repository<Proposal>, IProposalRepository
    {
        private readonly ApplicationDbContext _db;
        public ProposalRepository(ApplicationDbContext db) : base(db)
        {
            _db = db;
        }
        public void Update(Proposal proposal)
        {
            var objFromDb = _db.Proposals.FirstOrDefault(s => s.ProposalId == proposal.ProposalId);
            if (objFromDb != null)
            {
                objFromDb.AccountId = proposal.AccountId;
                objFromDb.ArmouringId = proposal.ArmouringId;
                objFromDb.BaseUnitId = proposal.BaseUnitId;
                objFromDb.ProposalDate = proposal.ProposalDate;
                objFromDb.ProposalReference = "MEVA" + "-" + proposal.ProposalId + "-" + proposal.ProposalCategoryId + "-" + proposal.BaseUnitId;
                objFromDb.ProposalCategoryId = proposal.ProposalCategoryId;
                _db.SaveChanges();
            }
        }
    }
}

The intials properties of the SelectList are not currently present, so I cannot access them. My question is how do I make the present in the ProposalRepository.cs file?

The full IProposalRepository.cs file is as follows:

using MEVASALES.Models;
using System;
using System.Collections.Generic;
using System.Text;
namespace MEVASALES.DataAccess.Repository.IRepository
{
    public interface IProposalRepository : IRepository<Proposal>
    {
        void Update(Proposal proposal);
    }
}

The full VWProposal.cs file is as follows:

VWProposal.cs

using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.Collections.Generic;
using System.Text;
namespace MEVASALES.Models.ViewModels
{
    public class ProposalVM
    {
        public Proposal Proposal { get; set; }
        public IEnumerable<SelectListItem> AccountList { get; set; }
        public IEnumerable<SelectListItem> ArmouringList { get; set; }
        public IEnumerable<SelectListItem> BaseUnitList { get; set; }
        public IEnumerable<SelectListItem> ProposalCategoryList { get; set; }
    }
}

In the ProposalController.cs I am achieving the required function when the record is created, but am struggling with the Update method uses in ProposalRepository.cs

The ProposalController.cs file is as follows:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MEVASALES.DataAccess.Repository.IRepository;
using MEVASALES.Models;
using MEVASALES.Models.ViewModels;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace MEVASALES.Areas.Admin.Controllers
{
    [Area("Admin")]
    public class ProposalController : Controller
    {
        private readonly IUnitOfWork _unitOfWork;
        public ProposalController(IUnitOfWork unitOfWork)
        {
            _unitOfWork = unitOfWork;
        }
        public IActionResult Details(int id)
        {
            var proposalFromDb = _unitOfWork.Proposal.
                        GetFirstOrDefault(u => u.ProposalId == id, includeProperties: "Account,Armouring,ProposalCategory,BaseUnit");
            return View(proposalFromDb);
        }
        public IActionResult Index()
        {
            return View();
        }
        public IActionResult Upsert(int? id)
        {
            ProposalVM proposalVM = new ProposalVM()
            {
                Proposal = new Proposal(),
            AccountList = _unitOfWork.Account.GetAll().OrderBy(s => s.CompanyName).Select(i => new SelectListItem
            {
                Text = i.CompanyName,
                Value = i.AccountId.ToString()
            }),
                ArmouringList = _unitOfWork.Armouring.GetAll().OrderBy(s => s.ArmouringName).Select(i => new SelectListItem
                {
                    Text = i.ArmouringName,
                    Value = i.ArmouringId.ToString()
                }),
                BaseUnitList = _unitOfWork.BaseUnit.GetAll().OrderBy(s => s.BaseUnitName).Select(i => new SelectListItem
                {
                    Text = i.BaseUnitName,
                    Value = i.BaseUnitId.ToString()
                }),
                ProposalCategoryList = _unitOfWork.ProposalCategory.GetAll().OrderBy(s => s.ProposalCategoryName).Select(i => new SelectListItem
                {
                    Text = i.ProposalCategoryName,
                    Value = i.ProposalCategoryId.ToString()
                })
            };
            if (id == null)
            {
                //this is for create
                return View(proposalVM);
            }
            //this is for edit
            proposalVM.Proposal = _unitOfWork.Proposal.Get(id.GetValueOrDefault());
            if (proposalVM.Proposal == null)
            {
                return NotFound();
            }
            return View(proposalVM);
        }
        [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Upsert(ProposalVM proposalVM)
        {
            if (ModelState.IsValid)
            {
                if (proposalVM.Proposal.ProposalId == 0)
                {
                    _unitOfWork.Proposal.Add(proposalVM.Proposal);
                }
                else
                {
                    _unitOfWork.Proposal.Update(proposalVM.Proposal);
                }
                //int myid = proposalVM.Proposal.ProposalId;
                //var NewId = myid;
                //proposalVM.Proposal.ProposalReference = "Test" + NewId;
                _unitOfWork.Save();
            {
                    var catid = proposalVM.Proposal.ProposalCategoryId;
                    int myid = proposalVM.Proposal.ProposalId;
                    proposalVM.ProposalCategoryList = _unitOfWork.ProposalCategory.GetAll().OrderBy(s => s.ProposalCategoryName).Where(ProposalCategory => ProposalCategory.ProposalCategoryId == catid).Select(i => new SelectListItem
                    {
                        Text = i.ProposalCategoryInitials,
                        Value = i.ProposalCategoryId.ToString(
                    });
                    //var CatInitials = proposalVM.Proposal.ProposalCategory.ProposalCategoryInitials;
                    //var NewId = myid;
                    //ViewBag.NewId = NewId;
                    var PropoInitial = _unitOfWork.ProposalCategory.GetAll().Where(x => x.ProposalCategoryId == catid)
                        .Select(x => x.ProposalCategoryInitials).SingleOrDefault();
                    //var PropoInitial = _unitOfWork.ProposalCategory.GetAll();
                    //proposalVM.Proposal.ProposalReference = "Test New ID: " + "-" + myid + "-" + catid + "-" + PropoInitial;
                    proposalVM.Proposal.ProposalReference = "MEVA" + "-" + myid + "-" + catid + "-" + PropoInitial;
                    _unitOfWork.Save();
                };
                int Propid = proposalVM.Proposal.ProposalId;
                return RedirectToAction(nameof(Details), new { id = Propid.ToString() });
            }
            else
            {
                proposalVM.AccountList = _unitOfWork.Account.GetAll().OrderBy(s => s.CompanyName).Select(i => new SelectListItem
                {
                    Text = i.CompanyName,
                    Value = i.AccountId.ToString()
                });
                proposalVM.ArmouringList = _unitOfWork.Armouring.GetAll().OrderBy(s => s.ArmouringName).Select(i => new SelectListItem
                {
                    Text = i.ArmouringName,
                    Value = i.ArmouringId.ToString()
                });
                proposalVM.BaseUnitList = _unitOfWork.BaseUnit.GetAll().OrderBy(s => s.BaseUnitName).Select(i => new SelectListItem
                {
                    Text = i.BaseUnitName,
                    Value = i.BaseUnitId.ToString()
                });
                proposalVM.ProposalCategoryList = _unitOfWork.ProposalCategory.GetAll().OrderBy(s => s.ProposalCategoryName).Select(i => new SelectListItem
                {
                    Text = i.ProposalCategoryName,
                    Value = i.ProposalCategoryId.ToString()
                });
                if (proposalVM.Proposal.ProposalId != 0)
                {
                    proposalVM.Proposal = _unitOfWork.Proposal.Get(proposalVM.Proposal.ProposalId);
                }
            }
            return View(proposalVM);
        }
        #region API CALLS
        [HttpGet]
        public IActionResult GetAll()
        {
            var allObj = _unitOfWork.Proposal.GetAll(includeProperties: "ProposalCategory,Account,BaseUnit");
            return Json(new { data = allObj });
        }
        [HttpGet]
        [HttpDelete]
        public IActionResult Delete(int id)
        {
            var objFromDb = _unitOfWork.Proposal.Get(id);
            if (objFromDb == null)
            {
                return Json(new { success = false, message = "Error while deleting" });
            }
            _unitOfWork.Proposal.Remove(objFromDb);
            _unitOfWork.Save();
            return Json(new { success = true, message = "Delete Successful" });
        }
        #endregion
    }
}

 


Answers (7)