Ich habe eine HTML-Tabelle wie unten in meiner Ansicht:
<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>
Ich möchte alle HTML-Tabellenzeilen durchlaufen und die Werte in ADO.NET DataTable einfügen.
Einfach gesprochen, HTML-Tabelle in ADO.NET DataTable konvertieren.
Wie extrahiere ich Werte aus der HTML-Tabelle und füge sie in ADO.NET DataTable ein?
Die Ansicht basiert auf dem folgenden Modell
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; }
}
foreach
Schleife erzeugen Kontrollen in einer Sammlung. Sie benötigen einefor
Schleife oder eine benutzerdefinierteEditorTemplate
für das Modell. Ihreforeach
Schleife wird an nichts gebunden.name="LeaveType"
. Um zu binden , um Ihre Sammlung auf Post zurück, müssen die Kontrollen seinLeaveBalanceDetail[0].LeaveType
,LeaveBalanceDetail[1].LeaveType
usw.Antworten:
Um beim Zurückbinden an ein Modell gebunden zu werden, müssen die
name
Attribute der Formularsteuerelemente mit den Modelleigenschaften übereinstimmen. Ihre Verwendung einerforeach
Schleife generiert nicht die richtigen Namensattribute. Wenn Sie den HTML-Code überprüfen, werden mehrere Instanzen von angezeigt<input type="text" name="item.LeaveType" .../>
Aber um an Ihr Modell zu binden, müssten die Steuerelemente sein
<input type="text" name="LeaveDetailsList[0].LeaveType" .../> <input type="text" name="LeaveDetailsList[1].LeaveType" .../>
usw. Der einfachste Weg, darüber nachzudenken, besteht darin, zu überlegen, wie Sie auf den Wert einer
LeaveType
Eigenschaft imC#
Code zugreifen würdenvar model = new LeaveBalanceViewModel(); // add some LeaveBalanceDetails instances to the LeaveDetailsList property, then access a value var leaveType = model.LeaveDetailsList[0].LeaveType;
Da Ihre POST-Methode einen Parameternamen hat (z. B.
model
), lassen Sie einfach das Präfix (model
) fallen, und so muss das Namensattribut des Steuerelements sein. Dazu müssen Sie entweder einefor
Schleife verwenden (die Sammlung muss implementiert werdenIList<T>
).for(int i = 0; i < Model.LeaveDetailsList.Count; i++) { @Html.TextBoxFor(m => m.LeaveDetailsList[i].LeaveType) .... }
oder verwenden Sie eine benutzerdefinierte
EditorTemplate
(die Sammlung muss nur implementiert werdenIEnumerable<T>
)Im
/Views/Shared/EditorTemplates/LeaveBalanceDetails.cshtml
und dann in der Hauptansicht (nicht in einer Schleife)
<table> .... // add headings (preferably in a thead element <tbody> @Html.EditorFor(m => m.LeaveDetailsList) </tbody> </table>
und schließlich in der Steuerung
public ActionResult Edit(LeaveBalanceViewModel model) { // iterate over model.LeaveDetailsList and save the items }
quelle
Versuchen Sie dies in Bezug auf Ihre Anforderung
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" })) { @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> <input type="button" value="Submit" onclick="return ChoicesPoster.passChoices()" </div> }
quelle