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

标签 c# asp.net-mvc model-binding

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

相关文章:

laravel-4 - BindingResolutionException 目标 [Illuminate\Database\Eloquent\Model] 不可实例化

c# - 如何在 EF 中配置一对多关系

asp.net-mvc - asp.net mvc windows 身份验证 - 用户以不同用户身份登录

javascript - ASP.NET MVC 中的 JSON 未定义错误

asp.net-mvc - Orchard 1.6 分页?

asp.net-mvc-3 - HttpPost 操作中的 MVC 3 拆分参数

c# - 项目无法编译

c# - WPF 应用程序的 Windows 8 平铺图标?

c# - 为什么我不能给一个默认值作为除 null 之外的可选参数?

c# - Entity Framework Code First 与同一类的双重关系