首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将HTML表发布到ADO.NET数据表?

如何将HTML表发布到ADO.NET数据表?
EN

Stack Overflow用户
提问于 2018-08-17 06:40:38
回答 2查看 0关注 0票数 0

我的视图中有一个HTML表,如下所示:

代码语言:txt
复制
<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>

我想遍历所有html表行并在ADO.NET DataTable中插入值。

简单来说,将HTML表转换为ADO.NET DataTable。

如何从HTML表中提取值并插入到ADO.NET DataTable中?

视图基于以下模型

代码语言:txt
复制
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; }
}
EN

回答 2

Stack Overflow用户

发布于 2018-08-17 14:55:28

为了绑定回发模型,name窗体控件的属性必须与模型属性匹配。你用的foreach循环不生成正确的名称属性。如果你检查html,你将看到

代码语言:txt
复制
<input type="text" name="item.LeaveType" .../>

但是,为了绑定到你的模型,控件需要

代码语言:txt
复制
<input type="text" name="LeaveDetailsList[0].LeaveType" .../>
<input type="text" name="LeaveDetailsList[1].LeaveType" .../>

等考虑这一点的最简单方法是考虑如何访问LeaveType

代码语言:txt
复制
var model = new LeaveBalanceViewModel();
// add some LeaveBalanceDetails instances to the LeaveDetailsList property, then access a value
var leaveType = model.LeaveDetailsList[0].LeaveType;

由于你的POST方法将具有参数名称(比如模型),只需删除前缀(模型),这就是控件的name属性必须如何。 为了做到这一点,你必须使用for循环(集合必须实现IList <T>)

代码语言:txt
复制
for(int i = 0; i < Model.LeaveDetailsList.Count; i++)
{
    @Html.TextBoxFor(m => m.LeaveDetailsList[i].LeaveType)
    ....
}

或者使用自定义的EditorTemplate(该集合只需要实现IEnumerable <T>)

在/Views/Shared/EditorTemplates/LeaveBalanceDetails.cshtml中

代码语言:txt
复制
@model yourAssembly.LeaveBalanceDetails
<tr>
    <td>@Html.TextBoxFor(m => m.LeaveType)</td>
    ....
</tr>

然后在主视图中(不在循环中)

代码语言:txt
复制
<table>
    .... // add headings (preferably in a thead element
    <tbody>
        @Html.EditorFor(m => m.LeaveDetailsList)
    </tbody>
</table>

最后,在控制器中

代码语言:txt
复制
public ActionResult Edit(LeaveBalanceViewModel model)
{
    // iterate over model.LeaveDetailsList and save the items
}
票数 0
EN

Stack Overflow用户

发布于 2018-08-17 15:55:30

关于你的需求,请尝试如下:

代码语言:txt
复制
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);
});
代码语言:txt
复制
@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>
	}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档