2015-05-07 23 views
27

yayınla bir HTML Tablo benim görünümünde aşağıdaki gibi bir HTML tablosu vardır:ADO.NET DataTable'a

<table id="tblCurrentYear"> 
    <tr> 
     <td>Leave Type</td> 
     <td>Leave Taken</td> 
     <td>Leave Balance</td> 
     <td>Leave Total</td> 
    </tr> 
    @foreach (var item in Model.LeaveDetailsList) 
    { 
     <tr> 
      <td>@Html.TextBoxFor(m => item.LeaveType, new { width = "100" })</td> 
      <td>@Html.TextBoxFor(m => item.LeaveTaken, new { width = "100" })</td> 
      <td>@Html.TextBoxFor(m => item.LeaveBalance, new { width = "100" })</td> 
      <td>@Html.TextBoxFor(m => item.LeaveTotal, new { width = "100" })</td> 
     </tr> 
    } 
</table> 

Ben tüm html tablo satırları arasında yineleme ve ADO.NET DataTable değerleri eklemek istiyorum.

Basit konuşma, HTML Tablosunu ADO.NET DataTable'a dönüştürme.

HTML Tablosu'ndan değerler nasıl alınır ve ADO.NET DataTable'a nasıl eklenir?

görünüm geri yayında bir modele bağlamak için aşağıdaki modele

public class LeaveBalanceViewModel 
{ 
    public LeaveBalanceViewModel() 
    { 
     this.EmployeeDetail = new EmployeeDetails(); 
     this.LeaveBalanceDetail = new LeaveBalanceDetails(); 
     this.LeaveDetailsList = new List<LeaveBalanceDetails>(); 
    } 
    public EmployeeDetails EmployeeDetail { get; set; } 
    public LeaveBalanceDetails LeaveBalanceDetail { get; set; } 
    public List<LeaveBalanceDetails> LeaveDetailsList { get; set; } 
} 
+0

deneyin Eğer masa ve ekin metin kutusu değerlerini almak arıyorsunuz veritabanına veya tam html eklemek gerekiyor? –

+3

Son derlemenizden yaptığımız yorumlardan bir koleksiyonda kontroller oluşturmak için ** bir "foreach" döngüsü kullanamayacağınız açık değil mi? Model için bir 'for' döngüsüne veya özel bir EditorTemplate'e ihtiyacınız var. 'Foreach' döngüsünüz hiçbir şeye bağlanmaz. –

+0

@StephenMuecke Ama foreach çalışıyor ve HTML tablosunu bununla doldurabilirim. Bu tablo oluşturulduğunda, kullanıcı herhangi bir TextBox'taki değeri değiştirebilir ve Kaydet düğmesine basabilir.Kaydet'i tıkladığınızda, tüm TextBox değerlerini (satırdaki satır) seçip ADO.NET DataTable'a eklemek istiyorum. – RKh

cevap

39

dayanmaktadır, form denetimleri name nitelikleri modeli özelliklerini aynı olmalıdır. foreach döngüsünü kullanmanız doğru ad nitelikleri oluşturmaz. Eğer html incelemek Eğer

<input type="text" name="item.LeaveType" .../> 

birden çok örneğini göreceksiniz ama modeline bağlamak amacıyla kontroller

<input type="text" name="LeaveDetailsList[0].LeaveType" .../> 
<input type="text" name="LeaveDetailsList[1].LeaveType" .../> 

vb bu etmektir düşünmek kolay yolu olması gerekir Eğer C# kodunda LeaveType özelliği değerini erişmek nasıl dikkate

var model = new LeaveBalanceViewModel(); 
// add some LeaveBalanceDetails instances to the LeaveDetailsList property, then access a value 
var leaveType = model.LeaveDetailsList[0].LeaveType; 

sizin POST yöntemidiyelim ki (bir parametre adı olacak yana), öneki (model) bırakın ve denetimin name niteliği bu şekilde olmalıdır. Ya bir for döngü kullanması gerektiğini yapabilmek için

for(int i = 0; i < Model.LeaveDetailsList.Count; i++) 
{ 
    @Html.TextBoxFor(m => m.LeaveDetailsList[i].LeaveType) 
    .... 
} 

(toplama IList<T> uygulamalıdır) ya da /Views/Shared/EditorTemplates/LeaveBalanceDetails.cshtml

@model yourAssembly.LeaveBalanceDetails 
<tr> 
    <td>@Html.TextBoxFor(m => m.LeaveType)</td> 
    .... 
</tr> 
yılında

(sadece IEnumerable<T> uygulamak gerek topluluğu) özel EditorTemplate kullanmak

ve sonra ana görünümde (bir döngüde değil)

<table> 
    .... // add headings (preferably in a thead element 
    <tbody> 
     @Html.EditorFor(m => m.LeaveDetailsList) 
    </tbody> 
</table> 

ve son olarak, sizin ihtiyacına ilişkin olarak kontrolöre

public ActionResult Edit(LeaveBalanceViewModel model) 
{ 
    // iterate over model.LeaveDetailsList and save the items 
} 
+0

Bu, jilet motoru tarafından algılanabilir bir liste yapmak için önek adında bulunması gerekenleri açıklar. Teşekkürler! ;) – Ian

+0

Bu çok yardımcı oldu! Yine de bir sorun yaşıyorum - model türümü IEnumerable yerine bir Listede değiştirdim ve View'da bunun yerine For For döngüsünü kullanarak yineledim. Ancak, gönderdiğimde, Kontrolöre geçiyor ve benim modelim yok! Neden hiçbir şey olmaz? – Andarta

+0

@Andarta, Kodunuzu görmeden hangi hataları yaptığınızı bilmiyorum. Bir soru sormanız, ilgili detayları göstermeniz ve cevaplayabilmeniz için :) –

1

yılında, bu

jQuery(document).on("change", ".DDLChoices", function (e) { 
 
    
 
    var comma_ChoiceIds = ''; 
 
    var comma_ChoicesText = ''; 
 
    $('input[class="DDLChoices"]').each(function (e) { 
 
     if (this.checked) { 
 
      comma_ChoiceIds = comma_ChoiceIds + $(this).val() + ','; 
 
      comma_ChoicesText = comma_ChoicesText + $(this).parent('label').parent() + ','; 
 
     } 
 
    }); 
 
    $('#ChoiceIds').val(comma_ChoiceIds); 
 
    $('#ChoiceText').val(comma_ChoicesText); 
 
});
@using (Html.BeginForm("Actionname", "Controllername", FormMethod.Post, new { id = "frmChoices" })) 
 
{ 
 
\t 
 
    @Html.HiddenFor(m => m.ChoiceText, new { @id = "ChoiceText" }) 
 
    @Html.HiddenFor(m => m.ChoiceIds, new { @id = "ChoiceIds" }) 
 
    <div class="form-group"> 
 
     <div> 
 
      <table> 
 
       <tr> 
 
        <th>Name</th> 
 
        <th>Selected</th> 
 
       </tr> 
 
       @foreach (var item in @Model.Choices) 
 
       { 
 
        <tr> 
 
         <td> <label>@item.ChoicesText</label> </td> 
 
         <td> <input class="DDLChoices" value="@item.ChoiceIds" type="checkbox" /></td> 
 
        </tr> 
 
       } 
 
      </table> 
 
     </div> 
 
\t \t <input type="button" value="Submit" onclick="return ChoicesPoster.passChoices()" 
 
\t \t </div> 
 
\t }