1

我想从具有相同名称的参数的单个表单创建多个实体。我正在尝试创建一个以 1 开头并以数组中的最大项目数结尾的数组。实体框架是否默认执行此操作。

例子:

PersonName(1): "Bob"
PersonName(2): "John"
PersonName(3): "Mindy"

如果我使用实体框架循环遍历集合,是否存在名称和 id 属性的首选方法。

html:

<input name="personname(1)" id="personname(1)" value="Bob" /><br />
<input name="personname(2)" id="personname(1)" value="John" /><br />
<input name="personname(3)" id="personname(1)" value="Mindy" /><br />

我还注意到,当我使用 @Html.EditorFor 时,它有一些重载方法来命名 id 和 name 属性。那么是否建议使用设置为空字符串的模板名称来构建这些,并且

htmlFieldName="personname" + "(" + i + ")";

或者有没有首选的技术?

4

3 回答 3

3

如果您使用 Html 帮助程序,它会自动为您执行此操作,尤其是在您使用 EditorTemplates 时。例如:

@for(int i=0, i<collection.Count; i++)
{
    Html.TextBoxFor(m => m.collection[i].Name);
    <input type="submit"/>
}

这将创建具有正确索引的输入元素。更好的方法是简单地使用编辑器模板:

@Html.EditorFor(m => m.collection)
于 2013-06-24T06:16:14.743 回答
2

您可以使用 for 循环遍历集合。将 [index] 附加到 personname。例如:

for(int i = 0; i < personName.Length; i++)
{
    <input name="personName[" + i + "]" id="personName_" + i value=personName[i] />
}

请注意,该 ID 值不能包含方括号、大括号或类似内容,这就是您需要使用下划线加索引值之类的原因。

于 2013-06-24T06:04:38.090 回答
0

正确答案是您必须将父表添加为模型。在每次引用任何子字段或子表的字段时,您必须首先引用此父模型。所有子模型必须通过首先调用父模型在 EditorFor 的 HiddenFor、TextBoxFor 等中向下钻取。如果没有父级,它在执行保存更改或编辑时不知道如何正确关联它需要检查正确的引用。必须列出父 ID 和子 ID,以便将所有表组合在一个表单中,然后对字段执行保存更改。否则它将不包含这些字段,或者它将无法正确保存该表并且不会自动生成......是的,我说“自动生成”ID。

那里...我填写了菜鸟超越农民所需的所有信息。

那么为什么这很重要呢?因为如果@Model 不指向所有其他对象相关的最顶层对象,那么它不知道引用是如何关联的。示例是文档表。但是 Document 表可能有一个 Title 表的外键。那将是一对一的。Document 表仍需要首先列出,如 Document.Title.TitleName。在一个一对多的作者中...... b / c可能有多个作者......你仍然会首先列出文档。在 Document.Authors ... author 将是一个集合,因此您将遍历每个作者。但即使在 Partials 的最顶端,您仍然只能引用 @modelDocument 而不是作者,这将在内容区域中的 @Model 部分之后。如果您尝试仅引用 @model 作者部分。现在它没有 不了解它与文档的关系,并且您必须在添加作者之后的某个时间点在文档ID 的作者表的外键中添加文档标识符。不幸的是,如果您刚从文档开始,则没有必要这样做。

当然,这可能会使 b/c 变得更复杂一些,每个作者可以拥有多个文档,因此此处最好使用指向 documentauthors 表的链接表......但文档表仍然会列在部分的顶部视图甚至主视图,以便将正确的标识符和名称完全放置在 html 页面中,以便在提交表单时正确了解所有内容。此外,如果标识符不向外显示给用户,则应将标识符放置在隐藏输入字段的 html 帮助程序中。

现在让它增加次数并从某个分组开始......它需要一个查询字符串或一个发布属性来发送该组或作者列表或书籍列表的开始和停止范围,或者文件什么的。由于应该在 for 循环中输出一对多和多对多关系,因此它可以选择正确的关系来检索并选择要使用 linq 为实体框架显示的关系,该实体框架在私有成员变量中提供,允许您执行数据库 crud 操作。

对于点农民......什么都没有。

于 2013-08-04T00:14:15.377 回答