C# 如何在ASP.NET MVC中获取多个条目的值(在fly by jQuery中添加时)

C# 如何在ASP.NET MVC中获取多个条目的值(在fly by jQuery中添加时),c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,这是我的控制器: public ActionResult Create() { Number newNumber = new Number(); return View(newNumber); } [HttpPost] public ActionResult Create(Number NewNumber, FormCollection collection) { db.Numbers.Add(NewNumber)

这是我的控制器:

public ActionResult Create() {
            Number newNumber = new Number();
        return View(newNumber);
    }
[HttpPost]
    public ActionResult Create(Number NewNumber, FormCollection collection) {
            db.Numbers.Add(NewNumber);
            db.SaveChanges();
            return RedirectToAction("Index")
}
和视图:

@model PhoneBook.Models.Number
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<script src="../../Scripts/jQuery.AddNewNumber.js" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.Contact.Id)
<fieldset>
<legend>Number</legend>
<div class="TargetElements">
    <div class="editor-label">
        @Html.LabelFor(model => model.PhoneNumber)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.PhoneNumber)
        @Html.ValidationMessageFor(model => model.PhoneNumber)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.NumberKind)
    </div>
    <div class="editor-field">
    @Html.DropDownListFor(model => model.NumberKind.Title, NumberKinds)
    </div>
</div>
<p>
    <input class="AddNew" value="Add New" type="button" /></p>
<p>
    <input type="submit" value="Create" />
</p>
</fieldset>
}
这种方式(addnew)非常常见,我们所有人都可以看到,在许多站点中(因此必须有一个解决方案),但在检索值时存在问题。当我有一个输入元素(包括输入+下拉)时,我可以在控制器的post中检索如下值:

public ActionResult Create() {
            Number newNumber = new Number();
        return View(newNumber);
    }
[HttpPost]
    public ActionResult Create(Number NewNumber, FormCollection collection) {
            db.Numbers.Add(NewNumber);
            db.SaveChanges();
            return RedirectToAction("Index")
}
我读了这篇文章:,,但没有一篇文章没有任何关于飞行模式添加条目的解决方案,当我知道实体的数量时,它是可能的,但在飞行模式下它可以是1或1000

那个么,有并没有办法检索值并将它们添加到数据库中呢

编辑:

我在FormCollection中找到了这些值,但我不知道如何从集合中提取它们?这是绑定的breakponit中集合值的图片

Edit2:

查找以检索所有值:(每个元素都有一个键,如上图所示)


我对ASP.Net不太了解

但是从php&ROR来看,这是如何使它工作的

给出输入的html,如下所示

主要思想是使用
[]
来指示此命名参数将具有多个值


在服务器端脚本中,您可以将其作为
some name[0]
some name[1]
接收,就像它是一个数组一样。简单。。试试看。

为什么不添加一个带有新提交按钮的新表单,并只提交新值

当然,新旧表单不必嵌套,因为它们不应该工作

我做了几次,但方法略有不同。
您的js函数应该对一个方法进行后异步调用,该方法返回一个包含整个新表单的部分视图。

您试图做的是将模型绑定到一个对象列表,您的案例是非顺序的

如果遵循如下所述的约定,ASP.NET MVC
DefaultModelBinder
可以绑定任意对象:

非顺序索引

当您不能保证提交的值将 维护顺序索引?例如,假设您希望允许 在通过JavaScript提交书籍列表之前删除行

好消息是,通过引入额外的隐藏输入,您可以 允许使用任意索引。在下面的示例中,我们提供了一个隐藏的 为需要绑定到的每个项目输入.Index后缀 列表每个隐藏输入的名称都相同,因此 如前所述,这将为模型绑定器提供一个很好的集合 绑定到列表时要查找的索引的数目

您可以从以下位置阅读整篇文章:

以下是代码示例:

<form method="post" action="/Home/Create">

    <input type="hidden" name="products.Index" value="cold" />
    <input type="text" name="products[cold].Name" value="Beer" />
    <input type="text" name="products[cold].Price" value="7.32" />

    <input type="hidden" name="products.Index" value="123" />
    <input type="text" name="products[123].Name" value="Chips" />
    <input type="text" name="products[123].Price" value="2.23" />

    <input type="hidden" name="products.Index" value="caliente" />
    <input type="text" name="products[caliente].Name" value="Salsa" />
    <input type="text" name="products[caliente].Price" value="1.23" />

    <input type="submit" />
</form>

控制器操作应如下所示:

[HttpPost]
public ActionResult Index(IEnumerable<Product> products) {

    foreach(var item in products) { 

        //play with your product here.
    }
}
[HttpPost]
公共行动结果索引(IEnumerable产品){
foreach(产品中的var项){
//在这里玩你的产品。
}
}
另外,请参见以下文章:

编辑可变长度列表,ASP.NET MVC 2-style

验证可变长度列表,ASP.NET MVC 2-style


这两篇文章是针对ASP.NET MVC 2的,但在ASP.NET MVC 3上的作用相同,每个元素都有一个键,因此您可以使用它,例如:

string[] PhoneNumbers = collection.GetValues("PhoneNumber");

这还不错,但对于客户端用户必须按“提交”按钮的任何新条目,它可以是1000次单击而不是一次单击。是的,你是对的,但这样你就可以对任何数据进行原子控制:猜测一个用户插入50个新联系人,第一个是错误的。是否要使其他49也无效?仅使插入的内容无效不是更好吗?另一方面(但这不是一个非常有利的因素),您的带宽使用率也较低。嗯,我不确定带宽使用是否会减少,但我认为这种方式(添加新条目并提交一次)非常常见,他们会如何处理?除了你的答案,我对一个提交的方式感兴趣。