2011-10-13 53 views
0

基本上說,我有一個操作將表單保存到數據庫,然後將用戶重定向到列表。從這個列表中,用戶可以選擇一些操作。如何重定向到具有不存在ID的頁面?

其中一個操作是必不可少的,我希望用戶在創建對象後直接傳遞給這個直線,但是,由於第一個對象的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小時,直到我可以張貼一個答案。

除非我誤會 - 在這種情況下,請有人告訴我!...看起來Entity Framework會自動更新您傳遞的對象。

當我通過一個form對象時,在調用SaveChanges時,它自動設置表單對象的ID。

因此,所有我需要的是:

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

你是正確的,EF將填充ID一旦對象已被保存(通過'的SaveChanges()') - 儘管你在這個缺少你的「摘錄「代碼。 –

回答

0

除非是我弄錯了 - 在這種情況下,請有人告訴我!...看起來Entity Framework會自動更新您傳遞的對象。

當我傳遞一個表單對象時,在調用SaveChanges時,它會自動設置表單對象的ID。

因此,所有我需要的是:

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

試試這個:

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」 方法後,您的視圖模型id屬性得到更新

+0

我不太喜歡這一點 - 雖然應用程序目前可能沒有多少用戶,但如果將來有任何延遲和/或大量用戶,我可以看到這會導致正在檢索的問題/錯誤記錄。 – wil

+0

我改變了答案,看看現在就試試看 – GianT971