控制器不必要地在数据库中创建新用户

时间:2013-11-15 16:49:30

标签: c# entity-framework asp.net-mvc-4

在我的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);
}

“计划/创建”视图如下所示:

Schedule/Create

并具有以下代码:

<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”用户。看到这张图片:

This is the image which shows an extra user is created unwantedly

在过去的几个小时里,我一直在为这种不受欢迎的行为而烦恼。 ScheduleController的Create操作未指定创建额外用户。我不知道为什么它确实如此。

这里有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

这是因为你的.User.IsAvailabe属性。这会在添加计划时创建新用户。

根据您的日程安排,您必须attach现有用户。也许你甚至可以摆脱UserId并在你的表单中使用User.Id。