gpt4 book ai didi

c# - 在一次提交中创建多条记录

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:03 25 4
gpt4 key购买 nike

我是 MVC 3 的新手,所以我不知道这是否可行。如果不是,最好的方法是什么:

我有一个 Model1,它有很多属性和一个创建 View 。在此页面中,人们填写所需的数据并提交。但我的问题是 Model1 还包含 SubModel1,这是另一个模型(也是数据库中的另一个表)。我想在创建页面上提供按钮,以通过弹出的 CSS 表单“即时”创建一些 SubModel1,当提交 SubModel1 时,使用 SubModel1 列表更新 Model1 创建页面,但是:

  1. 由于当前未保存 Model1,在 CSS 弹出表单上完成提交后,我应将子模型保存在何处?我可以将它添加到 Model1 模型中吗?如果是,怎么做?
  2. 当我返回“创建”页面时,我需要做什么才能更新并在列表中显示 SubModel1 名称等示例。
  3. 当我在 Model1 上提交时,我是否只需要保存 Model1 其余部分将自动保存,还是我需要自己在 Controller 中以正确的顺序进行所有保存?

抱歉,如果这是新问题,但它会对我有很大帮助!谢谢!

最佳答案

就像很多人说的,没有愚蠢的问题。

您在这里暴露的问题是经常发生的事情,有时解决方案比我们想象的要简单。

有不止一种方法可以真正实现你想要做的事情,但在我看来,为了获得更流畅的体验,使用 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.

通过坚持这个绑定(bind),这将允许您在 Controller 中等待您的 Model1。

[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");
}

您如何保存您的项目和子项目取决于您如何访问您的数据( Entity Framework 、linq-to-sql、经典 ADO.NET 或任何适合您需要的东西)

更多细节:一些关于如何添加新元素的例子

这是您需要添加元素的那种 javascript(这里我使用表格来显示子项)

对于这个例子,SubItems 数组的名称是这样的:

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

因此我知道当我添加一个新项目时,新名称将是:

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

提交后,服务器会将名称绑定(bind)到模型中的属性。

您可以在 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);
});
});

关于c# - 在一次提交中创建多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13433983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com