Here is my code for my AddNewProductViewModel
using AccessorizeForLess.Data;
using System.Collections.Generic;
using System.ComponentModel.DataA
First I would change your ViewModel to include a SelectedCategoryId
and I would change your options to be Categories
.
Without seeing the code for your get
I am assumbing ProductCategory
is something like the following:
public class ProductCategory {
public int Id {get;set;}
public string Name { get;set;}
}
Your razor mark-up would them become:
<div class="form-group">
@Html.LabelFor(model => model.Categories, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.SelectedCategoryId,
new SelectList(Model.Categories, "Id", "Name"), "- Please Select -")
@Html.ValidationMessageFor(model => model.Categories)
</div>
</div>
The first parameter is the selected catgegory and your options are populated from Categories
.
WorkingFiddle
I solved the issue (thanks to everyone for the tips). This is for anyone who may be having issues like I was.
I changed my Create method to look like so:
// GET: /Products/Create
public ActionResult Create()
{
var p = new AddNewProductViewModel();
p.Categories = entities.ProductCategories.ToList();
return View(p);
}
My AddNewProductViewModel looks like so:
using AccessorizeForLess.Data;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web;
namespace AccessorizeForLess.ViewModels
{
public class AddNewProductViewModel
{
public string Name { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
public decimal Price { get; set; }
public string AltText { get; set; }
public int Quantity { get; set; }
public HttpPostedFileBase Image { get; set; }
public int SelectedCategoryId {get;set;}
public List<ProductCategory> Categories { get; set; }
public ProductCategory Category { get; set; }
}
}
The in my view:
<div class="form-group">
@Html.LabelFor(model => model.SelectedCategoryId, "Category",new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.SelectedCategoryId, new SelectList(Model.Categories, "CategoryId", "CategoryName"), "- Please Select -")
@Html.ValidationMessageFor(model => model.SelectedCategoryId)
</div>
</div>
Thanks for the help everyone :)
Use your controller to build the list, then call the list from the view.
Controller:
public static List<SelectListItem> GetDropDown()
{
List<SelectListItem> ls = new List<SelectListItem>();
lm = (call database);
foreach (var temp in lm)
{
ls.Add(new SelectListItem() { Text = temp.name, Value = temp.id });
}
return ls;
}
Call the Dropdown:
@Html.DropDownListFor(x => x.Field, PathToController.GetDropDown())