首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#- ASP.net MVC 3-在表中插入多行

C#- ASP.net MVC 3-在表中插入多行
EN

Stack Overflow用户
提问于 2014-04-08 11:28:29
回答 2查看 9.9K关注 0票数 4

今年我是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

这些都是有用的,但对我的问题却没有帮助。

如果有人能就这个问题向我提供建议,我将不胜感激。谢谢您抽时间见我

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-08 14:23:50

首先,我同意@AndrewCounts。你的问题相当广泛,很难给出高质量的答案。不过,我可以给你一些一般性的指导,希望这将使你走。

通常,如果您要插入多个行,那么您实际上只是在讨论提供一个表单,其中包含一组作为对象列表提交的重复字段。如果有定义的项数,则可以将对象列表作为视图的模型传递:

GET action

代码语言:javascript
复制
public ActionResult CreateMyModels()
{
    var myModels = new List<MyModel>();
    for (var i = 0; i < totalItems; i++)
    {
        myModels.Add(new MyModel());
    }
    return View(myModels)
}

视图

代码语言:javascript
复制
@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属性期望采用以下格式:

代码语言:javascript
复制
ListName[index].FieldName

如果您的POST动作签名看起来像:

代码语言:javascript
复制
[HttpPost]
public ActionResult CreateMyModels(List<MyModel> myModels)

那么您的字段需要命名如下:

代码语言:javascript
复制
myModels[0].FirstField
myModels[0].SecondField
...
myModels[1].FirstField
...

在用于向页面呈现字段集的JavaScript中,需要确保正确设置name属性。

无论你采用哪种方法,你的岗位行动都是一样的。您将收到一份物品列表,需要插入每一项内容。在这个例子中,我将假设实体框架,因为大多数MVC应用程序都会使用实体框架。显然,您需要修改这段代码以适应您自己的情况:

代码语言:javascript
复制
[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);
}
票数 6
EN

Stack Overflow用户

发布于 2014-07-10 09:52:04

代码语言:javascript
复制
[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();    
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22935621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档