2011-11-19 41 views
3

的获取多条目(的jQuery在飞加时)的值,这是我的控制器:如何针对ASP.NET MVC

public ActionResult Create() { 
      Number newNumber = new Number(); 
     return View(newNumber); 
    } 

和查看:

@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按钮(使用jQuery AddNewNumber.js)新的输入+ DropDown添加到客户端。这是脚本:

$(document).ready(function() { 
$('.AddNew').click(function() { 
    var targetcloneelements = $(".TargetElements:first").clone(); 
    targetcloneelements.find('input').val(''); 
    targetcloneelements.insertAfter('.TargetElements:last'); 
}); 
}); 

这样(新增)很平常,我们都可以看到,在许多网站(所以必须有一个解决方案),但在检索值的问题。当我有一个输入元件(包括输入+下拉)我可以检索像在我的控制器的职位以下值:

[HttpPost] 
    public ActionResult Create(Number NewNumber, FormCollection collection) { 
      db.Numbers.Add(NewNumber); 
      db.SaveChanges(); 
      return RedirectToAction("Index") 
} 

我读这文章:123但他们都没有任何不解决方案为飞行模式添加条目,当我知道实体的数量,它可能是可能的,但在飞行模式下,它可以是1或1000

那么,有什么办法来检索值并将它们添加到数据库?

编辑:

我找到的FormCollection的值,但还没有我不知道如何从收集提取出来?这是集合值的图片在breakponit

Pic

EDIT2的结合:

查找检索所有值:(每一个元素都有,在上述PIC看到一个键)

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

回答

1

每一个元素都有一个键,因此您可以用这个例子:

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

我对ASP.Net没有多少了解。

但是从php & ROR这可以使它如何工作。

给输入的HTML作为跟随

<input name='some-name[]' class='blah-blah' />

主要思想是利用[]表示,这一名为PARAM将有多个值。

而在您的服务器端脚本中,您可以收到它作为some-name[0] & some-name[1]就好像它是一个数组。简单..试试吧。

1

你为什么不添加一个新的表单与一个新的提交按钮,只提交新的值?

当然,旧的和新的形式不必嵌套,因为它们不应该工作。

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

+0

这不是坏事,但对于任何新进入的客户端用户必须按提交按钮,它可以是1000点击而不是点击。 – Saeid

+0

是的你是对的,但这种方式你有任何数据的原子控制:猜测用户插入50个新联系人,首先是错误的。你想让其他49也无效吗?只有插入的内容无效才更好吗?另一方面(但它不是很好),你也有一个较少的带宽使用。恕我直言。 –

+0

嗯,我不确定带宽使用的少,但我认为这种方式(添加新条目并提交一次)是非常平常的,他们做什么来处理它?在你的回答旁边,我有兴趣提供一种方法。 – Saeid

3

你所试图做的是所谓的模型绑定到对象的列表,你的情况下,它的非序列。如果你遵循惯例描述像下面

ASP.NET MVC DefaultModelBinder可以绑定任意对象:

非循序索引

当你不能保证提交的值会发生什么将 保持一个序列指数?例如,假设您想在通过JavaScript提交书籍列表之前允许删除行,则可以使用 。

的好消息是,通过引入额外的隐藏输入,你可以 允许任意索引。在下面的示例中,我们为每个我们需要绑定到 列表的项目提供隐藏的 输入,其后缀为.Index后缀。这些隐藏输入中的每一个的名称都是相同的,因此前面描述的 ,这将给模型联编程序一个很好的收集索引 以查找绑定到列表时。

你可以阅读整篇文章:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

下面是代码示例:

<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. 
    } 
} 

此外,请参阅以下文章也是:

编辑可变长度的名单,ASP.NET MVC 2式

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

验证可变长度的名单,ASP.NET MVC 2式

http://blog.stevensanderson.com/2010/01/28/validating-a-variable-length-list-aspnet-mvc-2-style/

ASP.NET这两条MVC 2但作品相同ASP.NET MVC 3