今年我是ASP.net MVC的新手。
问题如何实现接受多个插入到数据库的方法/模型类/视图?
我知道我将不得不使用模型绑定技术,但是我不知道如何在我的项目中实现这个技术。
提出的答案----一种解决方案将是使用多个插入实现视图的简单示例/模板。(控制器、模型、视图-代码示例)
示例Sceanrio:我有一个产品表,我想插入/创建11个产品类型。因此,在我的方法/视图中将11次插入到产品表中。
我一直在探索一种可能的解决办法:
https://stackoverflow.com/search?q=model+binding+to+a+collection
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
这些都是有用的,但对我的问题却没有帮助。
如果有人能就这个问题向我提供建议,我将不胜感激。谢谢您抽时间见我
发布于 2014-04-08 14:23:50
首先,我同意@AndrewCounts。你的问题相当广泛,很难给出高质量的答案。不过,我可以给你一些一般性的指导,希望这将使你走。
通常,如果您要插入多个行,那么您实际上只是在讨论提供一个表单,其中包含一组作为对象列表提交的重复字段。如果有定义的项数,则可以将对象列表作为视图的模型传递:
GET action
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将正确地生成字段名,以便将它们作为列表发布。
如果您有一个未定义的或可变的项目数,那么您将负责生成正确的字段名。模型绑定器对项目列表中字段的name属性期望采用以下格式:
ListName[index].FieldName如果您的POST动作签名看起来像:
[HttpPost]
public ActionResult CreateMyModels(List<MyModel> myModels)那么您的字段需要命名如下:
myModels[0].FirstField
myModels[0].SecondField
...
myModels[1].FirstField
...在用于向页面呈现字段集的JavaScript中,需要确保正确设置name属性。
无论你采用哪种方法,你的岗位行动都是一样的。您将收到一份物品列表,需要插入每一项内容。在这个例子中,我将假设实体框架,因为大多数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);
}发布于 2014-07-10 09:52:04
[HttpPost]
public ActionResult Index(List<Employee> employees)
{
CompanyEntities DbCompany = new CompanyEntities();
foreach (Employee Emp in employees)
{
Employee Existed_Emp = DbCompany.Employees.Find(Emp.ID);
Existed_Emp.Name = Emp.Name;
Existed_Emp.Gender = Emp.Gender;
Existed_Emp.Company = Emp.Company;
}
DbCompany.SaveChanges();
return View();
}https://stackoverflow.com/questions/22935621
复制相似问题