【问题标题】:Using a Submit Button to add items to a database使用提交按钮将项目添加到数据库
【发布时间】:2015-09-12 01:04:47
【问题描述】:

我还是一名学生,几乎没有管理数据库的经验(几乎没有)。所以我一直试图弄清楚的是我有“追随者”,他们从餐厅页面的菜单中选择菜单项(使用复选框和提交按钮)。我将模型配置为关注者在他们的表中有一个 MenuItems 数组,但是在提交按钮将这些菜单项添加到关注者数组的地方,我无法获得正确的编码。

这是我目前的操作方法:

    public ActionResult AddMenuItems(int MenuItemID)
    {
    //  Need to run through array of MEnuItem ID's and add them to the Followers LIst of MEnuItems


        foreach (var menuItem in Model.MenuItems)//Getting an error here because it can't call Model.MenuItems, not sure how to properly get there....
        {
            Model.MenuItems menuItem = new Model.MenuItems();  
            menuItem.menuItemID = menuItem.Key;
            if (menuItem.key == MenuItemID) 
            { 
                Follower.Add(menuItem); 
            }

        }

    }

我是否朝着正确的方向前进?任何人都可以发布伪代码来引导我朝着正确的方向前进吗?

【问题讨论】:

    标签: asp.net-mvc-5


    【解决方案1】:

    一般情况下,我会将您推荐给Microsoft's set of Entity Framework tutorials。您似乎并不真正了解如何正确设置实体/上下文。

    接下来,您的代码是矛盾的。您谈论拥有一组菜单项 id,但您的操作只需要一个 id。如果您确实想发布多个 id,则需要绑定到 List<int> 或类似名称,而不是 int

    假设您实际上应该有一个 id 列表,那么一般来说,您希望使用这些 id 从数据库中选择菜单项,然后将它们添加到包含菜单项的 Follower 集合中:

    db.MenuItems.Where(m => menuItemIds.Contains(m.Id)).ToList()
        .ForEach(m => follower.MenuItems.Add(m));
    

    但是,在编辑现有选择时,您需要更加小心,因为运行上述代码实际上会使 Entity Framework 尝试读取已经存在的菜单项。相反,您首先需要删除已取消选择的项目,然后仅添加新项目。由于这是多对多,现有项目不需要更新。

    // Remove deselected menu items
    follower.MenuItems.Where(m => !menuItemIds.Contains(m.Id)).ToList()
        .ForEach(m => follower.MenuItems.Remove(m));
    
    // Add newly selected menu items
    var existingMenuItemIds = follower.MenuItems.Select(m => m.Id).ToList();
    db.MenuItems.Where(m => menuItemIds.Except(existingMenuItemIds).Contains(m.Id)).ToList()
        .ForEach(m => follower.MenuItems.Add(m));
    

    【讨论】:

    • 这正是我正在寻找的,感谢您提供指向教程的链接和详尽的解释。
    • 这可能是一个非常简单的问题,但我在删除 menuItemIds
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多