2012-11-17 63 views
2

我對MVC 3非常陌生,所以我不知道這是否可能。如果不是,最好的辦法是什麼:在單個提交中創建多條記錄

我有一個Model1,有很多屬性和創建視圖。在這個頁面中,人們填寫所需的數據並提交。但我的問題是Model1還包含SubModel1,它是另一個模型(和數據庫中的另一個表)。我會想提供創建頁面「上飛」通過彈出CSS樣式當SubModel1是submited,更新型號1創建頁面SubModel1的名單,但一些SubModel1創建按鈕:

  1. 由於Model1當前未保存,因此在CSS彈出窗體上完成提交時,我會在哪裏保存子模型?我可以將它添加到Model1模型中嗎?如果是這樣,怎麼樣?
  2. 當我回到創建頁面時,我需要怎麼做才能更新並在列表中顯示SubModel1名稱。
  3. 當我在Model1上進行提交時,是否只需要保存Model1,剩下的會自動保存,還是需要我自己在控制器中以正確的順序進行所有保存?

對不起,如果它是新問題,但它會幫助我很多! 謝謝!

+0

夫婦都是模型已經physicaly存在的問題,是要提出一個觀點兩款車型,並基於子模型獲取模型數據的您的問題 –

+0

如果在物理上存在,則表示「在數據庫上」,否則它們不會。這是一個創造性的觀點。所以我的目標是在最後用戶點擊提交,模型1和它的所有SubModel1被創建,但我不知道如何做到這一點! –

回答

1

像很多人說的那樣,沒有一個愚蠢的問題。

您在這裏暴露的問題是發生了很多事情,解決方案比我們想象的要簡單一些。

有很多方法可以真正實現您想要做的事情,但在我看來,爲了獲得更流暢的體驗,使用JavaScript來顯示PopUp並將子項添加到Model1是最佳選擇。

您的SubModel1項目不應該立即保存在您的數據庫中,原因很簡單,您的Model1可能不受限制。

在這種情況下,您的CSS彈出窗口應該只是一個存在於頁面中的表單(div或其他),並使用javascript向Model1項目添加新行。

因此,當您提交Model1時,它將包含所有修改,包括新的SubModel1項目。

There is a naming convention to using to allow proper serialization of the form when submitting.

通過堅持這種結合,這將讓你等待你的型號1在CONTROLER。

[HttpPost] 
public ActionResult MyPostAction(Model1 item) 
{ 
    //do some verification here 
    if (ModelState.IsValid) 
    { 
    //save your Model1 data 
    foreach(SubModel1 subitem in item.SubItems) 
    { 
     //Save your SubItems here 
    } 
    } 
    return RedirectToAction("Index"); 
} 

你如何保存你的項目和子項目是你如何訪問您的數據(實體框架,LINQ到SQL,經典ADO depedant。NET或任何適合您的需求)

更多詳細信息:如何添加新的元素

這是一種JavaScript代碼,你將需要添加的元素(在這裏我使用了一些爲例表中顯示子項目)

在這個例子中,子項陣列是名稱這樣的:

SubItems[0-based index].{SubItem property name} 

因此我知道,當我添加NE w Item,新名稱將爲:

SubItems[SubItems.length].name 
SubItems[SubItems.lenght].description 

一旦您提交,服務器就會將名稱綁定到模型中的屬性。

你可以看到在行動這對JsFiddle

$(document).ready(function() { 
    $("#TestButton").click(function() { 
     var $parent = $("#SubItems"); 
     var $newItem = $parent.find("tr:last").clone(); 

     $parent = $parent.find("tr:last").parent(); 
     var numElem = $parent.find("tr").length; 

     $newItem.find('[name$="description"]').attr("name", "SubItems[" + numElem + "].description"); 
     $newItem.find('[name$="name"]').attr("name", "SubItems[" + numElem + "].name"); 

     $parent.append($newItem); 
    }); 
}); 
+0

這證實了很多事情......讓我們看看我是否可以編程!我會標記你作爲答案,如果它的作品:)謝謝 –

+0

你可以添加一個示例如何將SubModel1添加到當前Model1?我對如何做到這一點有些困惑。 –

+0

我添加了一些細節。我使用超級簡單的模型使其易於閱讀,但無論您的對象多麼複雜,這都可以工作。 –

相關問題