为什么我的DropDownListFor在POST时填充我的id属性?

时间:2016-02-29 18:41:16

标签: c# model-view-controller razor

我有DropDownListFor为我显示Events的列表。我正在尝试POST支持所选ID的{​​{1}}。 event始终以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回来其他一切。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

问题出在这里

Bind(Include ="...")

您还应该包含EventId。如果EventId错过了这一点,则EventId user属性会获得默认值,即0.还包括此Bind声明,那么当创建user模型时,将从POST数据中获取EventId的值,并且您发布的值将被正确设置。