今年我是 ASP.net MVC 的新手。
问题 我将如何实现一个方法/模型类/ View 来接受对数据库的多次插入?
我知道我必须使用模型绑定(bind)技术,但我不确定如何在我的项目中实现它。
建议的答案 考虑的解决方案是使用多个插入实现 View 的简单示例/模板。 ( Controller 、模型、 View - 代码示例)
示例场景:我有一个产品表,我想插入/创建 11 种产品类型。因此在我的方法/ View 中向产品表插入 11 次。
我一直在研究探索可能的解决方案,使用:
https://stackoverflow.com/search?q=model+binding+to+a+collection
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
这些很有用,但对我的问题没有帮助。
如果有人可以就此问题向我提供建议,我将不胜感激。 谢谢你的时间
最佳答案
首先,我同意@AndrewCounts。你的问题很广泛,很难提供高质量的答案。不过,我可以给你一些一般性的指导,希望能帮助你前进。
一般来说,如果您谈论插入多行,您实际上只是在谈论提供一个表单,其中包含一组重复字段,这些重复字段作为对象列表提交。如果您有定义数量的项目,您可以传递一个对象列表作为 View 的模型:
GET 操作
public ActionResult CreateMyModels()
{
var myModels = new List<MyModel>();
for (var i = 0; i < totalItems; i++)
{
myModels.Add(new MyModel());
}
return View(myModels)
}
查看
@model List<Namespace.To.MyModel>
@using (Html.BeginForm())
{
for (var i = 0; i < Model.Count(); i++)
{
// Model fields here, i.e.
// @Html.EditorFor(m => m[i].SomeField)
}
<button type="submit">Submit</button>
}
在这里使用 for
而不是 foreach
很重要,这样您就可以获得索引器。如果您将索引项传递给 Html.EditorFor
之类的东西,Razor 将正确生成字段名称,以便将它们作为列表发布。
如果您有未定义或可变数量的项目,则您有责任生成正确的字段名称。 modelbinder 期望项目列表中字段的 name
属性采用以下格式:
ListName[index].FieldName
如果您的 POST 操作签名如下所示:
[HttpPost]
public ActionResult CreateMyModels(List<MyModel> myModels)
然后您的字段需要命名为:
myModels[0].FirstField
myModels[0].SecondField
...
myModels[1].FirstField
...
在用于将字段集呈现到页面的 JavaScript 中,您需要确保正确设置了 name
属性。
无论您采用哪种方法,您的 POST 操作都是相同的。您会收到一份 list ,您需要插入每一项。我将假设此示例使用 Entity Framework,因为大多数 MVC 应用程序都会使用它。您显然需要修改此代码以适应您自己的情况:
[HttpPost]
public ActionResult CreateMyModels(List<MyModel> myModels)
{
if (ModelState.IsValid)
{
foreach (var myModel in myModels)
{
db.MyModels.Add(myModel);
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View(myModels);
}
关于C#- ASP.net MVC 3- 向表中插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22935621/