我有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
回来其他一切。任何帮助将不胜感激!
答案 0 :(得分:2)
问题出在这里
Bind(Include ="...")
您还应该包含EventId
。如果EventId
错过了这一点,则EventId
user
属性会获得默认值,即0.还包括此Bind
声明,那么当创建user
模型时,将从POST数据中获取EventId
的值,并且您发布的值将被正确设置。