【问题标题】:HttpPost Not saving changesHttpPost 不保存更改
【发布时间】:2017-10-26 20:06:06
【问题描述】:

我正在构建这个视图,用户可以在其中编辑多个项目并使用“更新”按钮一次保存一个。

问题:我无法使“更新”按钮正常工作。这是post方法:

    [HttpPost, ActionName("Test")]

    public async Task<IActionResult> TestPost(int id)
    {

        var machinetoUpdate = await _context.Machines
            .SingleOrDefaultAsync(s => s.Id == id);
        if (await TryUpdateModelAsync(
            machinetoUpdate,
            "",
            s => s.MchName, s => s.StoreID, s => s.PUnit, s => s.Status))
        {
            try
            {
                await _context.SaveChangesAsync();

            }
            catch (DbUpdateException)
            {
                ModelState.AddModelError("", "Unable to save changes. " +
                    "Try again, and if the problem persists, " +
                    "see your system administrator.");
            }
            return RedirectToAction("Test");
        }
        return View(await _context.Machines.AsNoTracking().ToListAsync());
    }

更新: 基本上,这段代码不起作用。我正在学习一个教程并尝试对其进行调整以适应我的需要,但这个简单的方法并没有保存对任何行所做的更改。

它不会抛出任何错误。

这是视图的代码:

@model IEnumerable<Application.Models.Machine>
@{
    ViewData["Title"] = "Test";

}

<h2>Management</h2>
<hr />
<table class="table" asp-action="Test">
    <thead>
        <tr>
        <th>Serial</th>
        <th>Tienda</th>
        <th>Precio por Jugada</th>
        <th>Estado</th>
        <th>Update</th>
    </tr>
</thead>
<tbody>
    @foreach (var item in Model)
    {
        <tr>
            <td>
                <div class="form-group">
                    <div class="col-md-10">
                        <input asp-for="@item.MchName" readonly class="form-control" />
                        <span asp-validation-for="@item.MchName" class="text-danger"></span>
                    </div>
                </div>
            </td>
            <td>
                <div class="form-group">
                    <div class="col-md-10">
                        <select asp-for="@item.StoreID" class="form-control" asp-items="ViewBag.StoreID">
                            <option value="">-- Seleccione Tienda --</option>
                        </select>
                        <span asp-validation-for="@item.StoreID" class="text-danger"></span>
                    </div>
                </div>
            </td>
            <td>
                <div class="form-group">
                    <div class="col-md-10">
                        <input type="number" max="10" step=".1" asp-for="@item.PUnit" class="form-control" />
                        <span asp-validation-for="@item.PUnit" class="text-danger"></span>
                    </div>
                </div>
            </td>
            <td>
                <div class="form-group">
                    <div class="col-md-10">
                        <select name="Status" asp-for="@item.Status" class="form-control">
                            <option value="0">Operativo</option>
                            <option value="1">Nuevo Item</option>
                            <option value="2">Reparación</option>
                        </select>
                        <span asp-validation-for="@item.Status" class="text-danger"></span>
                    </div>
                </div>
            </td>
            <td>
                @using (Html.BeginForm())
                { 
                    @Html.AntiForgeryToken()
                    <input type="hidden" value="@item.Id" name="Id" />
                    <input type="submit" value="Update" />
                }
            </td>
        </tr>
    }
    </tbody>

欢迎任何帮助以及我在 Post 方法中可能做错的事情。提前致谢

【问题讨论】:

    标签: asp.net http-post ienumerable


    【解决方案1】:

    试试

    return View(machinetoUpdate)
    

    【讨论】:

    • 您好,感谢您的意见。我试过了,错误是这个(在帖子中提到): InvalidOperationException:传递给 ViewDataDictionary 的模型项是“Application.Models.Machine”类型,但是这个 ViewDataDictionary 实例需要一个“System.Collections”类型的模型项。 Generic.IEnumerable`1[Application.Models.Machine]'。
    猜你喜欢
    • 2014-10-16
    • 1970-01-01
    • 2018-01-06
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2021-02-09
    相关资源
    最近更新 更多