gpt4 book ai didi

c# - 在同一 View 中创建多个相同类型的对象

转载 作者:太空狗 更新时间:2023-10-29 23:38:16 27 4
gpt4 key购买 nike

在我的创建 View 中,我想让用户可以创建一个对象列表(相同类型)。因此,我在 View 中创建了一个表,包括每行中的每个输入字段。各个“可创建”对象的行数是固定数。

假设有一个包含标题和作者两个属性的 Book 类,用户应该能够创建 10 本或更少的书。

我该怎么做?

我不知道如何将对象列表(已绑定(bind))传递给 Controller ​​。我试过:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ICollection<Book> bookList)
{
if (ModelState.IsValid)
{
foreach(var item in bookList)
db.Books.Add(item);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(articlediscounts);
}

在 View 中它是:

<fieldset>
<legend>Book</legend>

<table id="tableBooks" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>Title</th>
<th>Author</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < 10 ;i++ )
{
<tr>
<td>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
</td>
<td>
<div class="editor-field">
@Html.EditorFor(model => model.Author)
@Html.ValidationMessageFor(model => model.Author)
</div>
</td>
</tr>
}
</tbody>
</table>

<p>
<input type="submit" value="Create" />
</p>
</fieldset>

由于 booklist 为 null,它不起作用,我不知道如何将所有创建的对象放入此列表中。

如果您有任何建议,我将不胜感激。

最佳答案

Scott Hanselman 有一些关于将数组传递给 MVC 控件绑定(bind)的详细信息:http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

本质上是:确保您的控件具有正确的名称:使用列表索引

将您的 for 循环更改为:

@for (int i = 0; i < 10 ; i++)
{
<tr>
<td>
<div class="editor-field">
<input type="text" name="book[" + i + "].Title" />
</div>
</td>
<td>
<div class="editor-field">
<input type="text" name="book[" + i + "].Author" />
</div>
</td>
</tr>
}

这将自动绑定(bind)到您的发布操作。

[HttpPost]
public ActionResult Create(IList<Book> bookList)

然后您可以根据需要显示/隐藏这些或使用 js/jquery 动态添加它们

编辑:正如 Stephen Muecke 正确观察到的那样,上述答案仅涉及从表单+字段到 HttpPost 的绑定(bind),这似乎是问题的重点。

原始帖子中的帖子操作与 View 不兼容。 OP 中有很多缺失的代码可能相关也可能不相关,但值得观察的是,如果您的 View 是针对单个模型的,那么您的失败代码在 ModelState.IsValid 上。需要返回单个模型,或者您的 View 需要用于 IList (或类似),否则您将无法获得服务器端验证(但如果您手动将其添加到 <input>s 中,您仍然可以获得客户端验证)

关于c# - 在同一 View 中创建多个相同类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30561648/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com