MVC 4添加错误

本文关键字:错误 添加 MVC | 更新日期: 2023-09-27 18:24:28

我犯这个错误已经一天多了,似乎真的无法修复。我知道网上有很多关于这个主题的问题,我已经读了一遍又一遍,仍然没有解决这个问题。我只是在学习MVC 4,所以我非常困惑。我收到错误消息:

具有键"cabinCrewId"的ViewData项的类型为"System.Int32",但必须为"IEnumerable"类型。

如有任何帮助或指导,我们将不胜感激!

我的控制器:

 public ActionResult AddCrew()
    {
        FlightCabinCrew fcc = new FlightCabinCrew();
        return View(fcc);
    }

行动后:

[HttpPost]
    public ActionResult AddCrew(FlightCabinCrew fcc)
    {
        if (ModelState.IsValid)
        {
            using (A1Context db = new A1Context())
            {
                var data = from person in db.person
                           from flightcrew in db.flightcabincrew
                           from cabincrew in db.cabincrew
                           where flightcrew.cabinCrewId == cabincrew.person
                           where cabincrew.person == person.id
                           select person.name;
                ViewBag.list = new SelectList(data.ToList(), "id", "name");
                db.flightcabincrew.Add(fcc);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
        }
        else
        {
            using (A1Context db = new A1Context())
            {
                var data = from person in db.person
                           from flightcrew in db.flightcabincrew
                           from cabincrew in db.cabincrew
                           where flightcrew.cabinCrewId == cabincrew.person
                           where cabincrew.person == person.id
                           select person.name;
                ViewBag.list = new SelectList(data.ToList(), "name", "name");
                return View(fcc);
            }
        }
    }
}

我的观点:

<div class="editor-label">
        @Html.LabelFor(model => model.cabinCrewId)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.cabinCrewId, (SelectList)ViewBag.list)
        @Html.ValidationMessageFor(model => model.cabinCrewId)
    </div>

感谢

我知道我需要在GET AddCrew方法中将SelectList分配给ViewBag(就像我在POST方法中所做的那样)。但我确实知道GET方法是什么,以及我在其中放了什么。

根据要求,这里是个人类

[Table("person")]
public class Person
{
    [Key, Column(Order = 1)]
    public int id { get; set; }
    public string name { get; set; }
}

MVC 4添加错误

答案是说你有两个控制器。一个处理http get请求的。。。

public ActionResult AddCrew(){...}

和另一个处理CCD_ 2请求的。。。

[HttpPost]
public ActionResult AddCrew(FlightCabinCrew fcc){...}

那么您将为两种控制器方法呈现相同的视图。您正在渲染的视图需要一个ViewBag对象,以便能够在下拉列表中显示项目。。。在这里

@Html.DropDownListFor(model => model.cabinCrewId, (SelectList)ViewBag.list)

您正在处理post请求的controllers操作方法中成功设置ViewBag对象。。。

ViewBag.list = new SelectList(data.ToList(), "id", "name");

但是您也需要在处理get请求的控制器操作方法中执行同样的操作。。。答案就是这么说的。GET控制器操作方法是您原始问题

中的第一个方法