C# 从Html.DropDownList获取值后出现奇怪错误

C# 从Html.DropDownList获取值后出现奇怪错误,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我用实体中的数据包装了SelectList。 现在我想把值从DropDownList发送到Entitie。 一切正常我从所选项目中得到了值,但最后我得到了他的错误 System.Web.Mvc.dll中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理 其他信息:没有键为“Przelew.DaneKont”的“IEnumerable”类型的ViewData项 视图模型: 控制器: 您需要模型上的另一个属性,如DaneKont,并将视图更改为以

我用实体中的数据包装了SelectList。 现在我想把值从DropDownList发送到Entitie。 一切正常我从所选项目中得到了值,但最后我得到了他的错误

System.Web.Mvc.dll中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理 其他信息:没有键为“Przelew.DaneKont”的“IEnumerable”类型的ViewData项

视图模型:

控制器:


您需要模型上的另一个属性,如DaneKont,并将视图更改为以下内容:

@Html.DropDownList("DaneKont", (SelectList)ViewBag.DaneKontList, "-- Wybierz kontot --")

回发时,DaneKont将保留所选的值。

I已更改Ito@Html.DropDownListForm=>Model.Przelew.DaneKont,选择ListViewBag.DaneKontList,-Wybierz kontot-现在可以工作了,我得到了值,但我得到了此错误,没有“IEnumerable”类型的ViewData项具有键“Przelew.DaneKont”。\u;回发时不会填充选择列表。您必须重新加载它,或者,更好的是,只需重新加载该项以获取回发的值。现在,您正在使用GET方法构建它们。您应该重构它,以便能够可靠地在POST上获得相同的值。1验证传入的值是否允许。2如果您需要选择列表项,请按照如下方式构建它:在konto{items.Addnew SelectListItem{Text=item.Nazwa+Saldo:+item.Saldo,Value=item.KontoId+};}我看不出您在POST方法中在哪里使用过此值。如果你更新你的问题,我可以用示例代码更新我的答案。
 @Html.DropDownList("Przelew.DaneKont", ViewBag.DaneKontList as SelectList, "-- Wybierz kontot --")
[Authorize]
        [HttpGet]
        public ActionResult WykonajPrzelew( ) {



            using (var context = new BankAppEntities1())
            {
                konto = context.Konto.SqlQuery("SELECT * FROM dbo.Konto WHERE UserId = '" + userIdValue + "' ").ToList();

            }


            WykonajPrzelewMultipleView mymodel = new WykonajPrzelewMultipleView();
            mymodel.Konta = konto;

            List<SelectListItem> items = new List<SelectListItem>();


            foreach (var item in konto){

                items.Add(new SelectListItem { Text = item.Nazwa+ "  Saldo :"+item.Saldo , Value = item.KontoId+"" });

             }

            ViewBag.DaneKont = items;

            SelectList selectList = new SelectList(items, "Value", "Text");
            ViewBag.DaneKontList = selectList;




            return View(mymodel);
        }


      [Authorize]
        [HttpPost]
        public ActionResult WykonajPrzelew(WykonajPrzelewMultipleView model)
        {



            string imie = model.Przelew.ImieOdbiorcy;
            string nazwisko = model.Przelew.NazwiskoOdbiorcy;
            int numerOdbiorcy = Convert.ToInt32(model.Przelew.NumerRachunkuOdbiorcy);
            int kontoID = Convert.ToInt32(model.Przelew.DaneKont); // I got Value from List 

            string tytul = model.Przelew.Tytuł;
            string ulica = model.Przelew.Ulica;
            string numerdomu = model.Przelew.nrdomu;
            string kod = model.Przelew.Kodpocztowy;
            string miasto = model.Przelew.Miasto;
       string tyt =model.Przelew.Tytuł;
            decimal kwota = model.Przelew.Kwota;
            DateTime date = System.DateTime.Now;



            using (var context2 = new BankAppEntities1())
            {
                var dane = new Przelew { Imie = imie, Nazwisko = nazwisko, NumerKontaOdbiorcy = numerOdbiorcy, KontoId = "1", NumerKontaNadawcy = 3444666, Ulica = ulica, Nr_domu = numerdomu,Kod_pocztowy="343", Miasto = miasto, Typ = "Normlany", UserId = userIdValue,Kwota=kwota , Date=date , Tytul=tyt };
                context2.Przelew.Add(dane);

                context2.SaveChanges();
            }

            return View();
        }
@Html.DropDownList("DaneKont", (SelectList)ViewBag.DaneKontList, "-- Wybierz kontot --")