2011-11-19 10 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