I am attempting to learn how to populate a dropdown list from a model in asp.NET MVC. So, I have a small application that has two domain models, Companies and StateList. The StateList is simple a list of all states in the U.S. I need to display the correct state acronymn instead of the ID in the Index view of Companies. I also need to populate the dropdown list of the Edit view of Companies with the values in StateList. Any help is appreciated.
Companies Model:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace croesus_rising.Models
{
public class Assignments
{
[Key]
public int assnmt_id_pk { get; set; }
[Required]
[DisplayName("Policy Number")]
[StringLength(50)]
public string polNum { get; set; }
[DisplayName("Claim Number")]
[StringLength(50)]
public string clmNum { get; set; }
[DisplayName("Storm Template")]
[StringLength(100)]
public string stormTmplt { get; set; }
[DisplayName("Peril")]
public int peril { get; set; }
[DisplayName("First Name")]
[StringLength(100)]
public string insdFirstName { get; set; }
[DisplayName("Last Name")]
[StringLength(100)]
public string insdLastName { get; set; }
[DisplayName("Phone Number")]
[StringLength(10)]
public string insdPhNum { get; set; }
[DisplayName("Email")]
[StringLength(100)]
public string insdEmail { get; set; }
[DisplayName("Address")]
[StringLength(255)]
public string lossLocAdd { get; set; }
[DisplayName("City")]
[StringLength(100)]
public string lossLocCity { get; set; }
[DisplayName("State")]
public int lossLocState { get; set; }
[DisplayName("Zip Code")]
[StringLength(20)]
public string lossLocZip { get; set; }
[DisplayName("First Name")]
[StringLength(100)]
public string otherContFirstName { get; set; }
[DisplayName("Last Name")]
[StringLength(100)]
public string otherContLastName { get; set; }
[DisplayName("Phone Number")]
[StringLength(10)]
public string otherContPhNum { get; set; }
[DisplayName("Email")]
[StringLength(100)]
public string otherContEm { get; set; }
[DisplayName("First Name")]
[StringLength(100)]
public string agentFirstName { get; set; }
[DisplayName("Last Name")]
[StringLength(100)]
public string agentLastName { get; set; }
[DisplayName("Phone Number")]
[StringLength(10)]
public string agentPhNum { get; set; }
[DisplayName("Email")]
[StringLength(100)]
public string agentEmail { get; set; }
[DisplayName("Submitted By")]
[StringLength(128)]
public string assnmtSubBy { get; set; }
[DisplayName("Special Instructions")]
public string specialInstructions { get; set; }
[DisplayName("Date Uploaded")]
public DateTime assnmtUpldDtTime { get; set; }
[DisplayName("Current Status")]
public int assnmtStatus { get; set; }
[DisplayName("Company")]
public int compIdFk { get; set; }
[ForeignKey("compIdFk")]
public Companies Companies { get; set; }
}
}
Here is the Companies Controller:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using croesus_rising.Models;
namespace croesus_rising.Controllers
{
public class CompaniesController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET: Companies
public ActionResult Index()
{
var companies = db.Companies.Include(c => c.compState).ToList();
return View(db.Companies.ToList());
}
// GET: Companies/Details/5
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Companies companies = db.Companies.Find(id);
if (companies == null)
{
return HttpNotFound();
}
return View(companies);
}
// GET: Companies/Create
public ActionResult Create()
{
return View();
}
// POST: Companies/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "compIdPk,compName,compMailAdd,compCity,compState,compZip,compUrl,isActive")] Companies companies)
{
if (ModelState.IsValid)
{
db.Companies.Add(companies);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(companies);
}
// GET: Companies/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Companies companies = db.Companies.Find(id);
if (companies == null)
{
return HttpNotFound();
}
return View(companies);
}
// POST: Companies/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "compIdPk,compName,compMailAdd,compCity,compState,compZip,compUrl,isActive")] Companies companies)
{
if (ModelState.IsValid)
{
db.Entry(companies).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(companies);
}
// GET: Companies/Delete/5
public ActionResult Delete(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Companies companies = db.Companies.Find(id);
if (companies == null)
{
return HttpNotFound();
}
return View(companies);
}
// POST: Companies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Companies companies = db.Companies.Find(id);
db.Companies.Remove(companies);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
}
StateList Model:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace croesus_rising.Models
{
public class StateList
{
[Key]
public int stateIdPk { get; set; }
[DisplayName("State")]
[Required]
[StringLength(10)]
public string StateAcro { get; set; }
}
}