2015-09-25 57 views
0

我正在使用ASP.NET MVC,並且在我的視圖中有一個動態表,用戶可以添加和刪除行。從視圖獲取html表信息到控制器

<table class="table" id="tableClasses"> 
     <tr> 
      <th>Class</th> 
      <!-- Icon to add a line. Done with javascript --> 
      <th><span class="table-add glyphicon glyphicon-plus"></span></th> 
     </tr> 
     @foreach (string sClass in tClasses) 
     { 
      <tr> 
       <td contenteditable="true">@sClass</td> 
       <td> 
        <span class="table-remove glyphicon glyphicon-remove"></span> 
       </td> 
      </tr> 
     } 
     <!-- This is our clonable table line --> 
     <tr class="hide"> 
      <td contenteditable="true">New Class</td> 
      <td> 
       <!-- Icon to remove the line. Done with javascript --> 
       <span class="table-remove glyphicon glyphicon-remove"></span> 
      </td> 
     </tr> 
</table> 

我需要檢索並保存我的控制器中所有行的值,但我不知道該怎麼做。

因爲我不知道表格中會有多少行,我不能使用id對嗎?

如何訪問和循環控制器中的表格單元格?

編輯:

這裏是控制器的代碼:

 
public ActionResult Edit([Bind(Include = "PKAL,FKHC,SIATA,SICAO,SNAME,SETDEARLY,SETDLATE,SLASTMIN,SCLASSFASTLANE,SDCSINTERFACE")] AIRLINE aIRLINE) 
     { 
      if (ModelState.IsValid) 
      { 
       aIRLINE.SETDEARLY = aIRLINE.SETDEARLY.Replace(":", string.Empty); 
       aIRLINE.SETDLATE = aIRLINE.SETDLATE.Replace(":", string.Empty); 
       aIRLINE.SLASTMIN = aIRLINE.SLASTMIN.Replace(":", string.Empty);

FormCollection collection = new FormCollection(); collection.Get("classTemp"); db.Entry(aIRLINE).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.FKHC = new SelectList(db.HANDLER, "PKHC", "SHCODE", aIRLINE.FKHC); return View(aIRLINE); }

棘手的是,SCLASSFASTLANE在數據庫中存儲爲 「A,B,C,X」。

這就是爲什麼我使用自定義模板來顯示和修改它,並且我需要一個動態表(上面的代碼)。

+0

你介意發佈你的控制器代碼嗎?另外,你將不得不在'

'中附上那個,或者使用jquery做一個'POST'。 – DPac

+0

您看起來沒有表單,即使您做了,也不會生成任何表單控件,因此沒有任何內容可以發佈到控制器。您將需要使用javascript/jquery獲取值和ajax以將其發佈到您的控制器。你可以給'​​'元素一個類名稱,或者只使用循環中的每個元素並獲得其第一個'​​'元素。 –

+0

我發佈了控制器代碼。 我嘗試使用圍繞

元素的表單,但它似乎不起作用。 你有沒有我可以用jQuery和Ajax做到這一點的例子? – JuFra

回答

0

好吧,我終於設法解決這個問題,這裏是我落得這樣做:

這裏查看(EditorTemplate)代碼(沒有太大變化):

<div id="table" class="table-editable"> 
<table id="tableClasses" class="table"> 
    <tr> 
     <th>@Resource.ClassFastLane</th> 
     <th><span class="table-add glyphicon glyphicon-plus"></span></th> 
    </tr> 
    @foreach (string sClass in tClasses) 
    { 
     <tr> 
      <td contenteditable="true">@sClass</td> 
      <td> 
       <span class="table-remove glyphicon glyphicon-remove"></span> 
      </td> 
     </tr> 
    } 
    <!-- This is our clonable table line --> 
    <tr class="hide"> 
     <td contenteditable="true"></td> 
     <td> 
      <span class="table-remove glyphicon glyphicon-remove"></span> 
     </td> 
    </tr> 
</table> 

<script> 
    //Store the class html table values in a string array and post it to the controller. 
    //function returnClasses() { 
    $("form").submit(function (e) { 
     //On empêche le formulaire de faire un submit. 
     e.preventDefault(); 

     //On sauve les données de la table des classes vers le controller. 
     var TableData = new Array(); 
     $('#tableClasses tr').each(function (row, tr) { 
      TableData = TableData + $(tr).find('td:eq(0)').text(); 
     }); 
     var postData = { values: TableData }; 

     $.ajax({ 
      type: "POST", 
      url: "/AIRLINE/SaveClasses", 
      //url: "/ControllerHelper/SaveClasses", 
      data: postData, 
      success: function (result) { 
       submit(); 
      }, 
     }); 
    }) 
    //Une fois les données sauvées, on fait le submit. 
    function submit() { 
     $("form").unbind('submit').submit(); 
    } 
</script> 

我防止形式:

我通過javascript檢索從表中的值提交,提交類值,然後在控制,我重新排列這些值我希望他們的方式,並提交表單通過編輯的ActionResult:

public ActionResult Edit([Bind(Include = "PKAL,FKHC,SIATA,SICAO,SNAME,SETDEARLY,SETDLATE,SLASTMIN,SCLASSFASTLANE,SDCSINTERFACE")] AIRLINE aIRLINE) 
    { 
     if (ModelState.IsValid) 
     { 
      aIRLINE.SCLASSFASTLANE = ControllerHelper.getClassesTemp(); 
      ControllerHelper.resetClassesTemp(); 

      db.Entry(aIRLINE).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     ViewBag.FKHC = new SelectList(db.HANDLER, "PKHC", "SHCODE", aIRLINE.FKHC); 
     return View(aIRLINE); 
    } 

它可能不是最漂亮的解決方案,但與我到目前爲止所獲得的知識以及我可以得到的一點幫助,現在它可以做得很好。

相關問題