像很多人說的那樣,沒有一個愚蠢的問題。
您在這裏暴露的問題是發生了很多事情,解決方案比我們想象的要簡單一些。
有很多方法可以真正實現您想要做的事情,但在我看來,爲了獲得更流暢的體驗,使用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);
});
});
夫婦都是模型已經physicaly存在的問題,是要提出一個觀點兩款車型,並基於子模型獲取模型數據的您的問題 –
如果在物理上存在,則表示「在數據庫上」,否則它們不會。這是一個創造性的觀點。所以我的目標是在最後用戶點擊提交,模型1和它的所有SubModel1被創建,但我不知道如何做到這一點! –