具有键的ViewData项的类型为&#39; System.Int32&#39;但必须是&#39; IEnumerable <selectlistitem>&#39; </selectlistitem>

时间:2014-03-13 07:23:06

标签: c# asp.net-mvc razor ienumerable

这是我的模特课:

public class EstimateModel:estimate
{
    public string EstimateNo { get; set; }

    //public SelectList Customer { get; set; }
    //[DisplayName("Customer ID :")]
    public int CustID { get; set; }

    [DisplayName("Customer Name :")]
    public string CustFname { get; set; }

    [DisplayName("Company Name :")]
    public string CompanyName { get; set; }

    [DisplayName("Total:")]
    public decimal total { get; set; }

    [DisplayName("Tax1 :")]
    public decimal tax1 { get; set; }

    public decimal tax2 { get; set; }

    public decimal tax3 { get; set; }

    public decimal subtot { get; set; }

    [DisplayName("Discount :")]
    public decimal Discount { get; set; }

    [DisplayName("GrandTotal:")]
    public decimal grandtotal { get; set; }

    public List<estimate> estimates { get; set; }

    public EstimateModel()
    {
        estimates = new List<estimate>();
    }
}

这是我的控制器代码:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(EstimateModel employee)
    {
        //employee.Customer= new SelectList("CustID","CustFName");
        DataTable dt = new DataTable();

        //for (int i = 0; i < employee.estimates.Count; i++)
        //{

        //    total = total + employee.estimates[i].Amount;

        //} ViewBag.Message = total;
        //Skill abc = new Skill();

               var sys = db.EstimateMasters.Create();
               // var user = db.Adils.Create();
               sys.EstimateNo = employee.EstimateNo;

       for(int i=0 ;i<employee.estimates.Count;i++)
       {
           sys.EstimateNo = employee.EstimateNo;
           sys.CustID = employee.CustID;
               sys.ProductName =  employee.estimates[i].ProductName;
               sys.Quantity = employee.estimates[i].Quantity;
               sys.Price = employee.estimates[i].Price;
               sys.Amount = employee.estimates[i].Amount;
               sys.Total=employee.total;
           sys.Tax1=employee.tax1;
           sys.Tax2 = employee.tax2;
           sys.Tax3 = employee.tax3;
           sys.Discount = employee.Discount;
           sys.SubTotal = employee.subtot;
           sys.GrandTotal = employee.grandtotal;

               db.EstimateMasters.Add(sys);
               db.SaveChanges();
       }

这是我的观看代码:

        <div> @Html.LabelFor(m =>m.CustID)
    @Html.DropDownList("CustID", "---Select---")

        </div>
    </div>
    <div>
        @Html.LabelFor(m => m.CustFname)
        @Html.TextBoxFor(m =>m.CustFname)
        @Html.LabelFor(m=>m.CompanyName)
        @Html.TextBoxFor(m =>m.CompanyName)
    </div>

我在DropDownListThe ViewData item that has the key 'CustID' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>'收到此错误。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

你必须将列表传递给下拉列表但是在这里你传递的是CustID,那就是整数。这导致错误。

请尝试以下代码:

1)创建包含项目的列表。

@{
List<SelectListItem> CustIDlistItems= new List<SelectListItem>();
CustIDlistItems.Add(new SelectListItem
    {
      Text = "text1",
      Value = "value1"
    });
CustIDlistItems.Add(new SelectListItem
    {
        Text = "text2",
        Value = "value2",
        Selected = true
    });
CustIDlistItems.Add(new SelectListItem
    {
        Text = "text3",
        Value = "value3"
    });
}

2)传递新创建的列表以列表作为参数进行查看。

@Html.DropDownListFor(model => model.Yourproperty, CustIDlistItems, "-- Select Status --")

希望这会对你有帮助..!

编辑:

您可以使用以下示例从数据库创建动态列表。

public IEnumerable<SelectListItem> GetTrainingSubjectsList(int selectedValue)
        {
            List<SelectListItem> TrainingSubjectsList = new List<SelectListItem>();

            TrainingSubjectsList.Add(new SelectListItem() { Selected = true, Text = "Select Subject", Value = "" });
            var TrainingSubjects = (from subjects in _context.TrainingDetails.Where(c => c.IsDeleted == false)
                                    select subjects).ToList();

            foreach (TrainingDetail TrainingDetail in TrainingSubjects)
            {
                SelectListItem Item = new SelectListItem();

                Item.Text = TrainingDetail.Title;
                Item.Value = TrainingDetail.TrainingDetailId.ToString();

                if (selectedValue == TrainingDetail.TrainingDetailId)
                {
                    Item.Selected = true;
                }

                TrainingSubjectsList.Add(Item);
            }

            return TrainingSubjectsList;
        }