2016-04-15 19 views
1

新しい項目が挿入されている場所からCategory_New.aspxにFormViewがあります。それは以下のメソッドに挿入されます。挿入後、編集ページにリダイレクトします。 IDを取得できません

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を知る方法は?

+0

http://stackoverflow.com/questions/5212751/how-can-i-get-id-of-inserted-entity-in-entity-framework – Emanuele

+0

@Emanuelleしかし項目変数はメソッドからアクセス不能ですmyForm_ItemInserted? – Willmore

+0

まず、最初の方法はItemInsertingです。 1つのイベントでコードを移動します。または、ItemInsertingメソッドから項目変数を移動してください。 – Emanuele

答えて

1

おそらくできることは、新しいカテゴリIDの値を保持するグローバルint型の変数を持つことです。それから、リダイレクトメソッドで渡すことができます。

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が保存されるオブジェクトのインスタンスに保存されます。

+0

私はセッションにcategoryidを入れることを考えていました。次に、メソッドmyForm_ItemInsertedでセッションからカテゴリIDを取得し、リダイレクトし、セッションからカテゴリIDをクリアします。私はちょうど挿入後に編集するためにリダイレクトするwebformsの便利な方法は何ですか? – Willmore

+0

@Willmore Sessionを使いたくない場合は、ViewStateを検討して、ポストバックを通じて値を保持することができます。そうすれば、リダイレクトメソッドでこの値を渡すことができます。代わりに、HiddenFieldコントロールを使用することもできます。 – woodykiddy

1

エンティティフレームワークを使用している場合、データベースに挿入されたデータの保存時にオブジェクト自動生成IDが保持されます。

通常、エンティティフレームワークはSELECT SCOPE_IDENTITY()を実行して、自動生成されたIDを取得します。

したがって、次のように挿入IDを取得する必要があります。

int Id= item.ID; 
+0

IDが利用可能です:)。メソッドmyForm_ItemInsertedでアイテム変数にアクセスする方法を知らないだけです。どうやってやるの? – Willmore

+1

以下のようなクラスレベルの変数を定義します。次に、その変数をItemInsertedメソッドに使用します。 Int categoryId = 0; public void myForm_InsertItem() { //データ挿入コード。 }保護ボイドmyForm_ItemInserted(オブジェクト送信者、FormViewInsertedEventArgs E) {Response.RedirectToRoute(新しいGetRouteUrl( "CategoryEdit"、{区分=区分}))。 } –

関連する問題