在我的MVC4应用程序上,我有一个页面,用户可以按计划放置。这个想法是你可以选择一个人,他们将按计划输入。附表模型如下:
public class Schedule {
[Key]
public int scheduleId { get; set; }
[Column(TypeName = "Date")]
[DataType(DataType.Date)]
public DateTime date { get; set; }
public int UserId { get; set; }
public virtual User User { get; set; }
}
Schedule Model引用的用户模型如下所示:
public class User {
public int UserId { get; set; }
[Display(Name = "Naam")]
public string Name { get; set; }
public string Email { get; set; }
[Display(Name = "Beschikbaar")]
public bool isAvailable { get; set; }
}
可以使用以下控制器将用户放置在计划页面上:
public ActionResult Create(Schedule schedule)
{
if (ModelState.IsValid)
{
db.Schedules.Add(schedule);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(schedule);
}
“计划/创建”视图如下所示:
并具有以下代码:
<h2>Schedule a person</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Schedule</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserId)
</div>
<div class="editor-field">
@Html.DropDownList("UserId", String.Empty)
@Html.ValidationMessageFor(model => model.UserId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.date)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.date)
@Html.ValidationMessageFor(model => model.date)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.User.isAvailable)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.User.isAvailable)
@Html.ValidationMessageFor(model => model.User.isAvailable)
</div>
<p>
<input type="submit" value="Plan" />
</p>
</fieldset>
}
此代码确实将用户置于指定日期的日程表中。但不知何故,每次将现有用户添加到计划中时,都会在数据库中创建额外“null”用户。看到这张图片:
在过去的几个小时里,我一直在为这种不受欢迎的行为而烦恼。 ScheduleController的Create操作未指定创建额外用户。我不知道为什么它确实如此。
这里有人有任何想法吗?
答案 0 :(得分:1)
这是因为你的.User.IsAvailabe属性。这会在添加计划时创建新用户。
根据您的日程安排,您必须attach现有用户。也许你甚至可以摆脱UserId并在你的表单中使用User.Id。