【问题标题】:MVC Update data in an Index ViewMVC 在索引视图中更新数据
【发布时间】:2015-06-17 05:41:21
【问题描述】:

我有一个索引视图列出了一堆信息,例如:

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.FullName)
        </td>

        <td>
            @Html.DisplayFor(modelItem => item.OptIn)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Donation)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Attended)
        </td>
        <td>
            @Html.ActionLink("Add One", "Check", new { id = item.ID }, new { @class = "btn btn-primary btn-default" })
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id = item.ID }) |
            @Html.ActionLink("Details", "Details", new { id = item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.ID })
        </td>
    </tr>
}

我想在此处设置一个添加按钮。请注意上面的行:

<td>
    @Html.ActionLink("Add One", "Check", new { id = item.ID }, new { @class = "btn btn-primary btn-default" })
</td>

这很容易如果我转到另一个控制器/视图但是我想留在索引视图中。我构建了一个 CHECK 控制器动作结果如下:

public ActionResult Check(int? id)
//[Bind(Include = "ID, Attended")] 
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Guest guest = db.Guests.Find(id);
    guest.Attended = (guest.Attended + 1);
    if (ModelState.IsValid)
    {
        db.Entry(guest).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return RedirectToAction("Edit/" + id);
}

这不起作用。该页面没有崩溃,但它没有做任何事情。我猜也许我需要为此使用JQUERY?我还没有学习 JQUERY,所以我试图避免这种情况。以前有没有人完成过这样的事情?我认为我在正确的轨道上,但我被困在这一点上......

【问题讨论】:

  • 您之前是否使用过 jQuery,如果是,请检查您是否在任何锚点点击中使用 e.preventDefault()e.stopPropagation()。还有,更新了吗?
  • 在您介绍 CHECK 控制器之前,您的问题很清楚。 CHECK 控制器的目的是什么。我认为您要做的就是添加一个按钮,onclick 应该允许用户添加新项目。页面不应刷新。对吗?
  • if (ModelState.IsValid) 有点无意义——ModelState 中唯一的属性是int? id,它永远不会无效。
  • 究竟是什么不起作用。当前代码显示您将Attended 属性增加1 并重定向回Index() 方法。你在期待什么?
  • 每次我按下“添加一个”按钮时,参与的字段都不会增加一

标签: c# asp.net-mvc visual-studio razor


【解决方案1】:

确保添加了 JQuery 库,然后创建如下脚本: $(窗口).load(函数(){ var data = $('#yourInputId').val();

               $.ajax({
                url: "http://" + location.host + "/CTRL/ACTION", 
                type: "POST",  
                data: { 'deleteId': data },
            }).done(function (data) {
                your logic here if server;
            }).fail(function (err) {
                alert(err.statusText);
            });
});

【讨论】:

    【解决方案2】:

    我不明白你的问题到底是什么。在索引视图中更新数据很容易——尤其是在您使用局部视图时。根据您在此处提供的信息,您不需要使用 Jquery。但是通过你的控制器我注意到了这一点(看起来不对):

    RedirectToAction("Edit/" + id);

    这是对的:

    RedirectToAction("Edit", new { id = id});

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 2015-10-12
      • 1970-01-01
      • 2012-07-01
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多