从输入发布多个值,循环通过post数组,将更改保存到多个表行dotnet core

时间:2018-01-07 20:49:14

标签: c# sql .net-core

我在dotnet核心的一个页面上显示了两个表。

  1. 第一张表仅显示数据
  2. 第二个表有一个输入字段
  3. 问题:

    表中有一个可变的行数(允许用户使用过滤器来缩小显示的数据量)。允许用户对表2中的每一行添加一个注释,注释存储在与显示表2相同的表中。

    我需要遍历post数组,只更新已经编辑过的行,我无法理解这一点。我仍然是dotnet核心的新手。

    这是我的代码,对我已经尝试过的内容有更多解释:

    查看:

    @using ASPNET_Core_1_0.Models.TbMapViewModels;
    @model TbMapViewModel
    @{
    }
    
    <div class="wrapper wrapper-content animated fadeInRight">
        <div class="row">
            <div class="col-lg-6">
                <div class="row">
                    <div class="col-md-12">
                        <table class="table table-condensed table-bordered table-hover">
                            <thead>
                                <tr>
                                    <td><b>Expense Description</b></td>
                                    <td><b>Dealership</b></td>
                                    <td><b>Unique ADP Code</b></td>
                                </tr>
                            </thead>
                            <tbody>
                                @foreach (var item in Model.TBMapUniqueADP)
                                {
                                    <tr>
                                        <td>@item.ExpenseDescriptionU</td>
                                        <td>@item.DealershipU</td>
                                        <td>@item.UniqueAdpU</td>
                                    </tr>
                                }
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
            <form asp-action="TbMapViewEdit">
                <div class="col-lg-6">
    
                        <input type="submit" value="Save" class="btn btn-primary" />
    
                    <div class="row">
                        <div class="col-md-12">
                            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                            <table class="table table-condensed table-bordered table-hover">
                                <thead>
                                    <tr>
                                        <td><b>TEMP ID</b></td>
                                        <td><b>Map To</b></td>
                                        <td><b>Accounts Code</b></td>
                                        <td><b>Line</b></td>
                                        <td><b>Map Result</b></td>
                                    </tr>
                                </thead>
                                <tbody>
                                    @foreach (var item in Model.TBMapBalances)
                                    {
    
                                        <tr>
                                            <td><input asp-for="TbMapId" value="@item.TbMapId" disabled/></td>
                                            <td><input asp-for="UniqueAdp" value="@item.UniqueAdp" /></td>
                                            <td>@item.AccountsCode</td>
                                            <td>@item.Line</td>
                                            <td>@item.MapResult</td>
                                        </tr>
                                    }
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </form>
        </div>
    </div>
    

    来自控制器的位:

    这只是为了返回视图:

    [Authorize]
    public async Task<IActionResult> TbMapView()
    {
        var model = new TbMapViewModel
        {
            TBMapBalances = await _context.TBMapBalances.Where(x => x.Dealership == "Derby").ToListAsync(),
            TBMapUniqueADP = await _context.TBMapUniqueADP.Where(x => x.DealershipU == "Derby").ToListAsync()
        };
    
        return View(model);
    }
    

    然后在POST上我尝试写这个,但是我不能在我的生活中找到关于如何访问和循环发布数组的任何信息。

    [Authorize]
    [HttpPost]
    public async Task<IActionResult> TbMapViewEdit(int Id, TBMapBalances tbMapBalances)
    {
    
    
        if (Id != tbMapBalances.TbMapId)
        {
            return NotFound();
        }
    
        if (ModelState.IsValid)
        {
            try
            {
                _context.Update(tbMapBalances);
                await _context.SaveChangesAsync();
            }
    
            catch (DbUpdateConcurrencyException)
            {
                if (!TbMapBalancesExists(tbMapBalances.TbMapId))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }
    
            return RedirectToAction("TbMapView");
        }
    
        return RedirectToAction("TbMapView");
    }
    

    我知道上面的代码仅适用于您传递特定ID并且您要编辑一行时。我试图将它作为一个起点,例如使用List<nameofthefield>给了我很多错误。

    最大的问题是我在这个主题上找不到dotnet核心,这意味着这非常容易,或者我非常密集。

    非常感谢你的帮助!

    编辑#1

    刚刚在EditorTemplates上发现了一些文章并将通过这些文章 - 是正确的方法(有些文章是针对asp.net而不是.net核心)?

    https://www.codeproject.com/Questions/768493/How-To-Add-or-Update-Multiple-Rows-And-Save-With-O

    http://www.dotnetawesome.com/2013/09/how-to-update-multiple-row-at-once.html

    Update multiple records at once in asp.net mvc

1 个答案:

答案 0 :(得分:0)

我在其他问题上得到了帮助,所以如果你最终在这里寻找答案,请转到save-multiple-rows-simultaneously-from-the-same-form-dotnet-core

看看Rudi的回答和我的编辑#2