为什么我的 DropDownListFor 在我发布时不会填充我的 id 属性

本文关键字:我的 填充 属性 布时不 id DropDownListFor 为什么 | 更新日期: 2023-09-27 18:36:56

我有一个DropDownListFor,它为我显示Events列表。我正在尝试POST回所选eventID.EventId总是以0的身份回来。(请忽略没有服务层或存储库的混乱,它只是一个示例项目。

我的模型:

public List<SelectListItem> Events { get; set; }
public int EventId { get; set; }

我的观点:

 @Html.DropDownListFor(m=> m.EventId, Model.Events, new { @class = "form-control" })

以下是我在控制器中填充Events的方式:

[HttpGet]
public ActionResult Create()
{
    //Setting up Events for the DropDownListFor
    var events = db.Events.ToList().Select(e => new SelectListItem
    {
        Text = e.EventName,
        Value = e.EventId.ToString()
    }).ToList();
    return View(new User {Events = events });
}

在我的POST

  [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "UserId,FirstName,LastName,Age,VehicleMake,VehicleModel,VehicleYear,AreGuestsAttending,TotalGuests")] User user)
    {
        if (ModelState.IsValid)
        {
            db.Users.Add(user);
            db.SaveChanges();
            var enrollUserForEvent = new Enrollment
            {
                UserId = user.UserId,
                EventId = user.EventId
            };
            _enrollmentController.Create(enrollUserForEvent);
            return RedirectToAction("Index", "Event");
        }
        return View(user);
    }

我尝试过几种不同的东西,例如:

  var eventIdString = user.Events.First(e => e.Selected == true).Value;
  int eventId = Int32.Parse(eventIdString);

但在上述情况下,user.Events null.

在四处玩耍和搜索之后,我找不到任何关于我可能在这里做错了什么。其他一切都很好,所以我不确定为什么我没有EventId回来其他所有内容。任何帮助将不胜感激!

为什么我的 DropDownListFor 在我发布时不会填充我的 id 属性

问题就在这里

Bind(Include ="...")

您还应该包括EventId。如果EventId错过了这一点,则 userEventId 属性将获得默认值,即 0。将此也包含在您的Bind语句中,然后在创建user模型时将从您发布的数据中获取EventId的值,并且您发布的值将正确设置。