【问题标题】:How do I redirect to a page with an ID that doesn't exist yet?如何重定向到 ID 尚不存在的页面?
【发布时间】:2026-01-06 10:10:01
【问题描述】:

基本上,我有一个将表单保存到数据库的操作,然后将用户重定向到列表。从此列表中,用户可以选择一些操作。

其中一个操作是必不可少的,我希望在创建对象后直接将用户传递给此操作,但是,由于第一个对象的 ID 尚不存在,我不确定如何传递 ID通过。

例如目前 -

            //Excerpt  
            db.form.Add(ViewModel);
            db.SaveChanges();
            return RedirectToAction("List");

然后我有一个正常拉的列表,有一个链接,用户可以点击进入/stage2/(id)

理想情况下,我希望将我的代码更改为:

            //Excerpt  
            db.form.Add(ViewModel);
            var newentry = db.SaveChanges();
            return RedirectToAction("Stage2", new {id = newentry));

我已经看到以这种方式调用 SaveChanges() 会导致返回一个 int,但是,我已经尝试过,它似乎并没有提取对象的 ID,我尝试了其他一些方法,但不确定要使用的语法。

我能想到的就是分离对象,然后再次选择它并返回,但是,有没有更“巧妙”或更直接的方法呢?



编辑 - 我想我已经解决了......但是,我需要等待 7 个小时才能发布答案。

除非我弄错了 - 在这种情况下,请有人告诉我!...看起来实体框架会自动更新您传递的对象。

当我将form 对象传递给它时,在调用SaveChanges 时,它会自动设置表单对象的ID。

所以,我只需要:

        //Excerpt  
        db.form.Add(ViewModel);
        return RedirectToAction("Stage2", new {id = ViewModel.id));

【问题讨论】:

  • 你是对的,一旦对象被保存(通过SaveChanges()),EF 将填充 id - 尽管你在“摘录”代码中缺少这个。

标签: c# asp.net-mvc-3 entity-framework-4.1 ef-code-first


【解决方案1】:

试试这个:

form ViewModel = new form();
// Add all your operations on the ViewModel object
db.AddToform(ViewModel);
db.SaveChanges();
//int id = ViewModel.id;
return RedirectToAction("Stage2", new {id = ViewModel.id));

调用“SaveChanges”方法后,您的 ViewModel id 属性会更新

【讨论】:

  • 我不太喜欢这个 - 虽然应用程序现在可能没有很多用户,但如果将来有任何延迟和/或很多用户,我可以看到这会导致问题/错误正在检索的记录。
  • 我改了答案,看看现在试试看
【解决方案2】:

除非我弄错了 - 在这种情况下,请有人告诉我!...看起来实体框架会自动更新您传递的对象。

当我向它传递一个表单对象时,在调用 SaveChanges 时,它会自动设置表单对象的 ID。

所以,我只需要:

    //Excerpt  
    db.form.Add(ViewModel);
    return RedirectToAction("Stage2", new {id = ViewModel.id));

【讨论】: