暂时保存项目,然后将其保存在数据库中

时间:2013-09-20 05:00:39

标签: asp.net-mvc

这是我的班级:

public class MyItem
{
[Key]
public ItemId{get;set;}
public ItemName{get;set;}
public ItemPrice{get;set;}
}

现在我的创建页面中有一个添加按钮:

<input type="submit" value="Create" id="Create" name="Create" />
<input type ="submit" value ="Add" id ="Add" name="Create" />

我有以下控制器。在这里,我想在我的创建视图中添加ItemName和price在某种临时存储中。我不想在数据库中添加项目,但想在表格的某种html帮助器中显示添加的项目

public ActionResult Create(MyItem myitem, string Create)
{
    if (Create == "Add")
    {

//is there any Html helper that will save the
added items and make a view?
//can I do this without using javascript
    }
    else
    if (ModelState.IsValid)
    {
        db.Items.Add(myitem);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(myitem);
}

2 个答案:

答案 0 :(得分:2)

您可以随时使用SESSION临时存储数据,然后当用户点击保存时,您可以从会话中获取数据并存储在数据库中

public ActionResult Create(MyItem myitem, string Create)
        {
            if (Create == "Add")
            {
                var list = Session[myitem] ?? new List<MyItem>();
                list.Add(myitem);
                Session[myitem] = list;
            }
            else
                if (ModelState.IsValid)
                {
                    var list = Session[myitem]; // add this list to DB
                    db.Items.Add(myitem);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }

            return View(myitem);
        }

答案 1 :(得分:0)

如果您不想使用会话,另一种选择可能是使用具有唯一密钥的缓存解决方案。

  • 配置基于键值的缓存服务器,如memcache,couchbase
  • 您可能需要在项目中使用enyim.caching和memcache.dlls
  • 在web.config中为缓存服务器添加配置
  • 对于每个唯一会话,交换密钥并暂时将值保存到密钥
  • 在确定所有内容都已到位或单击提交后,从缓存中读取所有内容并保存到数据库。

这是一些额外的工作,例如你必须安装缓存服务器并做一些额外的工作。但优点是我会说你会获得闪电般快速的表现。

可能是一种矫枉过正,但只是想让你知道有其他选择。如果您正在寻找高性能/可扩展系统,您可以考虑这一点。但是对于一个普通的小项目来说,就像科梅特先生所提到的那样,会议就足够了。