2016-10-27 40 views
2

所以我認爲是這樣的一個表: https://gfycat.com/WeakBlueIslandwhistler將動態生成的文本框值發送到C#控制器?

生成方式:

<table class="table table-bordered table-with-button table-condensed " id="hidTable"> 
          <thead> 
          <tr> 
           <th>HID #</th> 
           <th>Lines</th> 
          </tr> 
          </thead> 
          @for (int j = 0; j < 3; j++) 
          { 
           <tr> 
            <td> 
             <input class="form-control table-with-button" type="number" placeholder="HID" id="[email protected]"> 
            </td> 
            <td> 
             <input class="form-control table-with-button" type="number" placeholder="Lines" id="[email protected]"> 
            </td> 
           </tr> 
          } 
</table> 

新行和文本框是通過調用JavaScript方法創建的。

本質上講,有對本表中的文本字段的數目不詳的,和數據對需要傳遞給控制器​​......(我想將其存儲在TempData的對象?)

每個文本框都有一個唯一的ID(HID-1,HID-2 HID-3和線1,線2,線-3分別)

什麼是遍歷這些文本框的最佳途徑,節省他們的值(我可以在保存之前處理驗證),然後將其傳遞給後端?

+0

請注意,您的代碼將永遠無法正確地進行雙向綁定,並且您需要具有2個屬性(「int Hid」和「int Line」)的模型集合,然後正確生成視圖並允許正確綁定和驗證,參考[這個答案](http://stackoverflow.com/questions/28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308#28081308) –

回答

2

的MVC模型綁定器就能直接綁定POST數據如果符合一定的條件:

  • 的名稱和動態添加的HTML輸入ID符合由MVC使用的命名方案。即要綁定集合的第一個元素,則屬性的值應爲{collectionName}_0,並且name屬性的值應爲{collectionName}[0]
  • ViewModel包含可將輸入列表綁定到的集合。

所以你的情況,定義包含的HID和列表行

public class PostDataModel { 
    public ICollection<int> Hids { get; set; } 
    public ICollection<int> Lines { get; set; } 
} 

然後請確保增加了額外的行JavaScript代碼設置idname正確一個ViewModel。

第0線所產生的投入應該是這樣的:

<input class="form-control table-with-button" type="number" placeholder="HID" id="Hids_0" name="Hids[0]"> 
<input class="form-control table-with-button" type="number" placeholder="Lines" id="Lines_0" name="Lines[0]"> 

如果用戶可以sumbitting之前刪除任何行,注意non sequential indices

然後,只需使用正常POST提交表單,並使用它們的索引關聯HID和行。

+0

哇,謝謝,完美的作品!這種行爲是專門針對icollections還是可以用於其他集合類型? (出於好奇,真的,我堅持使用你的解決方案。) 可以說我會在某個時候想要索引。 – Bitz

+0

你不需要索引器,因爲它是一個簡單值的集合(索引器只需要複雜對象的集合,它可以簡單地爲''('id'屬性是不必要的) –

相關問題