Populate DropDownList in MVC 5

前端 未结 3 587
-上瘾入骨i
-上瘾入骨i 2021-02-15 17:33

Here is my code for my AddNewProductViewModel

using AccessorizeForLess.Data;
using System.Collections.Generic;
using System.ComponentModel.DataA         


        
相关标签:
3条回答
  • 2021-02-15 18:12

    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

    0 讨论(0)
  • 2021-02-15 18:16

    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 :)

    0 讨论(0)
  • 2021-02-15 18:19

    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())
    
    0 讨论(0)
提交回复
热议问题