插入重定向到编辑页面后。无法获取 ID

After insert redirect to edit page. Unable to get ID

我在插入新项目的 Category_New.aspx 中有 FormView。它被插入在下面的方法中。

 public void myForm_InsertItem()
    {            
        var item = new A.Models.Category();
        CategoryContext db = new CategoryContext();            
        TryUpdateModel(item);
        if (ModelState.IsValid)
        {
            // Save changes here
            db.Category.Add(item);
            db.SaveChanges();
            //item.CategoryID is present from this point
        }
    }

我想将用户重定向到用于编辑该项目的页面。该页面是 Category_Edit.aspx.

如何在方法 myForm_ItemInserted 中获取插入项目的 ID,以便下面的代码可以工作?

protected void myForm_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
     Response.RedirectToRoute(GetRouteUrl("CategoryEdit", new {CategoryID = /* how to get ID of inserted item??? */}));            
}

如何知道插入项的ID?

你可能会做的是有一个全局的int类型变量来保存新类别Id的值,然后你可以在你的重定向方法中传递它。

private int newCategoryId;
public void myForm_InsertItem()
    {            
        var item = new A.Models.Category();
        CategoryContext db = new CategoryContext();            
        TryUpdateModel(item);
        if (ModelState.IsValid)
        {
            // Save changes here
            db.Category.Add(item);
            db.SaveChanges();
            //item.CategoryID is present from this point
            newCategoryId = item.CategoryId; // presumably it's called categoryId
        }
    }

protected void myForm_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
     Response.RedirectToRoute(GetRouteUrl("CategoryEdit", new {CategoryID = newCategoryId}));            
}

这里的关键是插入的时候,将生成的ID保存到被保存对象的实例中。

如果您使用的是entity framework,它将在数据插入数据库时​​持久保存对象自动生成的id。

一般entity framework执行SELECTSCOPE_IDENTITY()获取自动生成的Ids。

因此您应该能够按如下方式获取插入的 ID。

int Id= item.ID;