Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# dropdownlist,不支持IEnumerable类型的ViewData项_C#_.net_Asp.net Mvc_Dropdownlistfor - Fatal编程技术网

C# dropdownlist,不支持IEnumerable类型的ViewData项

C# dropdownlist,不支持IEnumerable类型的ViewData项,c#,.net,asp.net-mvc,dropdownlistfor,C#,.net,Asp.net Mvc,Dropdownlistfor,型号: 控制器: public class Category { [Key] public int ID { get; set; } [Required(ErrorMessage = "Kategoria jest wymagana!")] public string Kategoria { get; set; } [Required(ErrorMessage = "Kod jest wymagany!")] public string Kod

型号:

控制器:

public class Category
{
    [Key]
    public int ID { get; set; }

    [Required(ErrorMessage = "Kategoria jest wymagana!")]
    public string Kategoria { get; set; }

    [Required(ErrorMessage = "Kod jest wymagany!")]
    public string Kod { get; set; }
}
public ActionResult DodajPrzedmiot()
{
if(StaticFunctions.ifloged())
{
使用(var db=new DatabaseContext())
{
var cats=来自数据库类别中的b
选择新的{b.Kategoria};
var x=cats.ToList().Select(c=>newselectListItem
{
Text=c.卡蒂戈里亚,
价值=卡蒂戈里亚
}).ToList();
//List catList=新列表();
//foreach(猫的t变量)
//{
//SelectListItems=新建SelectListItem();
//s.Text=t.ToString();
//s.值=t.ToString();
//catList.Add(s);
//}
ViewBag.Kategoria=x;
}
返回视图();
}
其他的
{
返回重定向操作(“Logowanie”、“User”);
}
}
视图:


@LabelFor(model=>model.Kategoria,htmlAttributes:new{@class=“controllabel col-md-2”})
@DropDownListFor(model=>model.Kategoria,null)
问题是,此列表显示了我从数据库中选择的值,当我添加一个具有所选类别的项目时,例如“Biurowe”类别,它会将信息添加到数据库中,但同时它会给我错误信息:

中发生“System.InvalidOperationException”类型的异常 System.Web.Mvc.dll,但未在用户代码中处理

其他信息:没有类型为的ViewData项 “IEnumerable”具有键“Kategoria”


我应该在这里更改什么?

@Html.DropDownListFor(model=>model.Kategoria,null)
中的第二个参数应该是项目列表,在您的情况下,它将是
ViewBag.Kategoria
。 我甚至建议您使用不同的名称,如
ViewBag.KategoriaList
。在ViewBag中使用与绑定到DropDownList的属性相同的列表名称时,有时会遇到问题

请尝试以下代码:

<div class="form-group">
        @Html.LabelFor(model => model.Kategoria, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.Kategoria, null)
        </div>
    </div>  
他认为:

public ActionResult DodajPrzedmiot()
    {
        if (StaticFunctions.IfLogged())
        {
            using (var db = new DatabaseContext())
            {
                var cats = from b in db.Categories
                           select new { b.Kategoria };

                var x = cats.ToList().Select(c => new SelectListItem
                {
                    Text = c.Kategoria,
                    Value = c.Kategoria
                }).ToList();

                ViewBag.KategoriaList = x;
            }
            return View();
        }
        else
        {
            return RedirectToAction("Logowanie", "User");
        }
    }
这是我的商品模型

@Html.DropDownListFor(model => model.Kategoria, (SelectList)ViewBag.KategoriaList)
以及HttpPost函数

public class Item
{
    [Key]
    public int ID { get; set; }

    [Display(Name = "Nazwa przedmiotu")]
    [Required(ErrorMessage = "Nazwa przedmiotu jest wymagana.")]
    public string Nazwa { get; set; }

    [Required(ErrorMessage = "Kategoria jest wymagana.")]
    public string Kategoria { get; set; }

    public string Magazyn { get; set; }

    [Required(ErrorMessage = "Kod jest wymagany.")]
    public string Kod { get; set; }

    [Display(Name = "Ilość zakupiona")]
    //[Required(ErrorMessage = "Ilość ogólna jest wymagana.")]
    public double Ilosc_zakupiona { get; set; }

    [Display(Name = "Ilość wypożyczona")]
    //[Required(ErrorMessage = "Ilość wypożyczona jest wymagana.")]
    public double Ilosc_wypozyczona { get; set; }

    [Display(Name = "Ilość magazynowa")]
    //[Required(ErrorMessage = "Ilość magazynowa jest wymagana.")]
    public double Ilosc_magazynowa { get; set; }

    [Display(Name = "Ilość zużyta")]
    //[Required(ErrorMessage = "Ilość zużyta jest wymagana.")]
    public double Ilosc_zuzyta { get; set; }

    [Display(Name = "Straty")]
    //[Required(ErrorMessage = "Straty są wymagane.")]
    public double Straty { get; set; }

    public string Sektor { get; set; }

    [Display(Name = "Półka")]
    public string Polka { get; set; }

    [Display(Name = "Pojemnik")]
    public string Pojemnik { get; set; }
}
[HttpPost]
公共行动结果DodajPrzedmiot(itm项目)
{
if(ModelState.IsValid)
{
尝试
{
使用(var db=new DatabaseContext())
{
if(itm.Ilosc_zakupiona-itm.Ilosc_wypozyczona<0)抛出新的ArgumentOutOfRangeException();
itm.Ilosc_magazynowa=itm.Ilosc_zakupiona-itm.Ilosc_wypozyczona;
db.Items.Add(itm);
//EXECUTESQLCOMAND(“插入项(Nazwa_przedmiotu、Kategoria、Kod、Ilosc_ogolna、Ilosc_pozostala、Ilosc_wypozyczona、Wartosc、Sektor、Regal)值({0}、{1}、{2}、{3}、{4}、{5}、{6}、{7}、{8}、{9})”,itm.Nazwa_przedmiotu,itm.Kategoria,itm.Kod,itm.Ilosc_ogolna,itm.Ilosc_pozostala,itm.Ilosc_wypozyczona,itm.Wartosc,itm.Sektor,itm.Regal);
db.SaveChanges();
}
}
catch(System.Data.Entity.Infrastructure.DbUpdateException)
{
ViewBag.erromessage=“Istnieje jużprzedmiot o takiej nazwie i/lub kodzie!”;
返回视图();
}
捕获(ArgumentOutOfRangeException)
{
ViewBag.erromessage=“Ilośćzakupiona i/lub wypożyczona nie mogąbyćmniejsze od zera!”;
返回视图();
}
}
返回视图();
}

它传递到Post函数并将所有信息添加到数据库中,同时显示与我之前写的相同的错误。

@Cezar您能帮助我理解这一点吗:“问题是,当我添加一个带有选定项(例如“Biurowe”)的项时,此列表显示了我从数据库中选择的值“分类它将信息添加到数据库,但同时它给了我一个错误:”当你说它将信息添加到数据库时,你是什么意思?我没有看到任何代码向数据库添加任何内容。你也需要添加逻辑来填充此Post操作中的ViewBag。我已经用Post操作中需要的代码编辑了我的答案。
[HttpPost]
    public ActionResult DodajPrzedmiot(Item itm)
    {
        if (ModelState.IsValid)
        {
            try
            {
                using (var db = new DatabaseContext())
                {
                    // try putting this code in a separate function and use that function in both actions to populate the ViewBag.
                    var cats = from b in db.Categories
                               select new { b.Kategoria };

                    var x = cats.ToList().Select(c => new SelectListItem
                    {
                        Text = c.Kategoria,
                        Value = c.Kategoria
                    }).ToList();

                    ViewBag.KategoriaList = x;

                    if (itm.Ilosc_zakupiona - itm.Ilosc_wypozyczona < 0) throw new ArgumentOutOfRangeException();
                    itm.Ilosc_magazynowa = itm.Ilosc_zakupiona - itm.Ilosc_wypozyczona;
                    db.Items.Add(itm);
                    db.SaveChanges();
                }
            }
            catch (System.Data.Entity.Infrastructure.DbUpdateException)
            {
                ViewBag.ErrorMessage = "Istnieje już przedmiot o takiej nazwie i/lub kodzie!";
                return View();
            }
            catch (ArgumentOutOfRangeException)
            {
                ViewBag.ErrorMessage = "Ilość zakupiona i/lub wypożyczona nie mogą być mniejsze od zera!";
                return View();
            }
        }
        return View();
    }
@Html.DropDownListFor(model => model.Kategoria, (SelectList)ViewBag.KategoriaList)
public class Item
{
    [Key]
    public int ID { get; set; }

    [Display(Name = "Nazwa przedmiotu")]
    [Required(ErrorMessage = "Nazwa przedmiotu jest wymagana.")]
    public string Nazwa { get; set; }

    [Required(ErrorMessage = "Kategoria jest wymagana.")]
    public string Kategoria { get; set; }

    public string Magazyn { get; set; }

    [Required(ErrorMessage = "Kod jest wymagany.")]
    public string Kod { get; set; }

    [Display(Name = "Ilość zakupiona")]
    //[Required(ErrorMessage = "Ilość ogólna jest wymagana.")]
    public double Ilosc_zakupiona { get; set; }

    [Display(Name = "Ilość wypożyczona")]
    //[Required(ErrorMessage = "Ilość wypożyczona jest wymagana.")]
    public double Ilosc_wypozyczona { get; set; }

    [Display(Name = "Ilość magazynowa")]
    //[Required(ErrorMessage = "Ilość magazynowa jest wymagana.")]
    public double Ilosc_magazynowa { get; set; }

    [Display(Name = "Ilość zużyta")]
    //[Required(ErrorMessage = "Ilość zużyta jest wymagana.")]
    public double Ilosc_zuzyta { get; set; }

    [Display(Name = "Straty")]
    //[Required(ErrorMessage = "Straty są wymagane.")]
    public double Straty { get; set; }

    public string Sektor { get; set; }

    [Display(Name = "Półka")]
    public string Polka { get; set; }

    [Display(Name = "Pojemnik")]
    public string Pojemnik { get; set; }
}
[HttpPost]
    public ActionResult DodajPrzedmiot(Item itm)
    {
        if (ModelState.IsValid)
        {
            try
            {
                using (var db = new DatabaseContext())
                {
                    if (itm.Ilosc_zakupiona - itm.Ilosc_wypozyczona < 0) throw new ArgumentOutOfRangeException();
                    itm.Ilosc_magazynowa = itm.Ilosc_zakupiona - itm.Ilosc_wypozyczona;
                    db.Items.Add(itm);
                    //db.Database.ExecuteSqlCommand("INSERT INTO Items(Nazwa_przedmiotu, Kategoria, Kod, Ilosc_ogolna, Ilosc_pozostala, Ilosc_wypozyczona, Wartosc, Sektor, Regal) VALUES({0},{1},{2},{3},{4},{5},{6},{7},{8},{9})", itm.Nazwa_przedmiotu, itm.Kategoria, itm.Kod, itm.Ilosc_ogolna, itm.Ilosc_pozostala, itm.Ilosc_wypozyczona, itm.Wartosc, itm.Sektor, itm.Regal);
                    db.SaveChanges();
                }
            }
            catch (System.Data.Entity.Infrastructure.DbUpdateException)
            {
                ViewBag.ErrorMessage = "Istnieje już przedmiot o takiej nazwie i/lub kodzie!";
                return View();
            }
            catch (ArgumentOutOfRangeException)
            {
                ViewBag.ErrorMessage = "Ilość zakupiona i/lub wypożyczona nie mogą być mniejsze od zera!";
                return View();
            }
        }
        return View();
    }