c# - ASP.NET 实体管理器 : create more than one entity in a view

标签 c# asp.net asp.net-mvc-4

我想创建一个创建 View ,您可以在其中为多个实体输入一个值 - “实体列表” 例如实体类

public class MyEntity{
public string myAttribute { get; set; }
}

我为 View 创建了一个如下所示的模型 View :

public class MoreEntites{
public List<MyEntity> MyEntities { get; set; }
}

在 View 中,我想使用 MoreEntities 让用户可以在一个 View 中输入更多的数据集(我的建议当然行不通)

@model myproject.ViewModels.MoreEntities
 ...
<div class="editor-label">
     @Html.LabelFor(model => model.MyEntities.ElementAt(0).MyAttribute)
</div>
<div class="editor-field">
     @Html.EditorFor(model => model.MyEntities.ElementAt(0).MyAttribute)
     @Html.ValidationMessageFor(model => model.MyEntities.ElementAt(0).MyAttribute)
</div>
<div class="editor-label">
     @Html.LabelFor(model => model.MyEntities.ElementAt(1).MyAttribute)
</div>
<div class="editor-field">
     @Html.EditorFor(model => model.MyEntities.ElementAt(1).MyAttribute)
     @Html.ValidationMessageFor(model => model.MyEntities.ElementAt(1).MyAttribute)
</div>
...

现在在 Controller 中,我想遍历列表并将 MyEntities 的每一项写入数据库中。当我运行程序时,我得到一个异常,我的列表是空的,我应该在使用它之前检查它是否为空。 这可能吗?它是如何工作的?一个“解决方案”是创建一个数组,但在这种情况下,我的程序将是可扩展的。 感谢您的帮助!

最佳答案

适用于实体的 Array[]!!!! 解决方案: 型号:

public class MyEntity{
public string MyAttribute { get; set; }
}

View 模型:

public class MoreEntites{
public MyEntity[] MyEntities { get; set; }
}

查看:

@model myproject.ViewModels.MoreEntities
 ...
<div class="editor-label">
     @Html.LabelFor(model => model.MyEntities[0].MyAttribute)
</div>
<div class="editor-field">
     @Html.EditorFor(model => model.MyEntities.[0].MyAttribute)
     @Html.ValidationMessageFor(model => model.MyEntities[0].MyAttribute)
</div>
<div class="editor-label">
     @Html.LabelFor(model => model.MyEntities[1].MyAttribute)
</div>
<div class="editor-field">
     @Html.EditorFor(model => model.MyEntities[1].MyAttribute)
     @Html.ValidationMessageFor(model => model.MyEntities[1].MyAttribute)
</div>
...

Controller :

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateMoreEntitiesAtOnce(MoreEntities set)
{
    foreach(var item in set.MyEntities) 
    {
        db.MyEntity.Add(item);
    }

    db.SaveChanges();

    return RedirectToAction("Index");
}

在我的例子中,如果必须尝试通过 JavaScript 向 View 添加更多文本框 因此,在将文本框添加到 DOM 时,您需要在纯 html 中增加文本框的名称

关于c# - ASP.NET 实体管理器 : create more than one entity in a view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20205295/

相关文章:

c# - 以编程方式获取 Win32 旧版控件的工具提示文本

javascript - 重定向 View 在 MVC 应用程序中不显示 "active"属性

razor - Razor DisplayFor 与 TextBoxFor MVC4 中的 if else 逻辑

javascript - 为什么 jscript 不显示我的项目?

c# - .NET WCF Json 反序列化 Dictionary<int, int>

C# 标志问题

c# - 通过 Xamarin 中的新 Activity 加载时布局不显示内容

mysql - 多用户数据库

c# - 如何在一个 foreach 中跳过结果迭代

c# - onClick 和 onClientClick 事件一起使用。不适用于 Internet Explorer