C# 如何使用ActionLink作为提交按钮来删除表中的每一行?

C# 如何使用ActionLink作为提交按钮来删除表中的每一行?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在开发一个应用程序,我需要显示详细信息,如身份证,姓名和地址的客户。一个人应该能够编辑或删除每个客户的详细信息。为此,我添加了编辑和删除操作链接作为到达行的按钮。在我的控制器中,我添加了开关盒来执行编辑或删除操作 我的问题是如何使用操作链接作为提交按钮。或者有没有更好的方法来执行编辑和删除记录 视图: @DisplayNameFor(model=>model.id) @DisplayNameFor(model=>model.name) @DisplayNameFor(model=>mo

我正在开发一个应用程序,我需要显示详细信息,如身份证,姓名和地址的客户。一个人应该能够编辑或删除每个客户的详细信息。为此,我添加了编辑和删除操作链接作为到达行的按钮。在我的控制器中,我添加了开关盒来执行编辑或删除操作

我的问题是如何使用操作链接作为提交按钮。或者有没有更好的方法来执行编辑和删除记录

视图:


@DisplayNameFor(model=>model.id)
@DisplayNameFor(model=>model.name)
@DisplayNameFor(model=>model.address)
@foreach(模型中的var项目)
{
@DisplayFor(modeleItem=>item.id)
@DisplayFor(modelItem=>item.name)
@DisplayFor(modelItem=>item.address)
@ActionLink(“编辑”,“新建{id=item.id}”)|
@ActionLink(“删除”,“新建{id=item.id}”)
}

这是我经常使用的方法,因为您询问是否有其他更好的方法。仅供参考,此示例使用FontAwesome图标和Bootstrap 4按钮样式

我喜欢使用Ajax,然后根据响应以某种方式更新前端

然后,如果用户想要编辑一条记录,我会将他们带到另一个页面编辑该特定条目,在那里我只使用标准的viewmodel和razor表单/
@Html.EditorFor()
stuff

您会注意到HTML有一个
@Item.Id
,它来自
@foreach(列表中的var Item)
中的viewmodel列表数据的迭代,这就是javascript中的Id值的来源

控制器 Html 像这样在桌子上划一行

<td class="text-nowrap"><a class="btn btn-primary text-white" href="@Url.Action("Edit", "Controller", new { id = item.Id })"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</a>  &nbsp;&nbsp; <button value="@item.Id" class="btn btn-primary text-white delete"><i class="fa fa-trash-o"></i>&nbsp;Delete</button></td>

正如@CodingYoshi建议的那样,我确实喜欢这样做

视图:


@ActionLink(“编辑”,“编辑详细信息”,新的{id=item.id})|
@ActionLink(“删除”,“删除”,新的{id=item.id})

如何实际为每个操作创建表单,并将它们路由到相应的控制器操作而不是您的switch语句?为您设置样式而不是尝试使用锚定标记,您的意思是@using(Html.BeginForm(“Delete”,“YourControllerName”){Edit}这样的东西是行不通的。继续并单击删除和编辑链接,看看会发生什么:它不会转到
MyTableView
操作。核心方法是让一个名为
Delete(intid)
Edit(intid)
的操作。当用户单击链接时,它将转到其中一个操作。该操作将返回表单以删除或编辑该项。用户将填写该表单,提交给第三个操作,该操作将处理该表单,然后向用户发送重定向以请求另一个页面。网上有很多例子,所以不知道你为什么要问这个问题。是的,但是CodingYoshi说,更可取的方式是链接将你发送到一个get操作,该操作将返回你要删除/编辑的项目,然后你将这些更改提交到delete/edit post操作。@CodingYoshi抱歉,是的,他必须先执行“编辑-获取”操作,但他可以将删除内容包装成一个表单来删除该项目。为什么不使用返回正确Http状态代码的ActionResults而不是JsonResult?@Fran这是我学习的方法,它可以工作。不过,我愿意参考其他资源来改进我的答案。返回幻数(代码)不是一个好主意。返回HTTP状态代码是首选方法,因为这是一个HTTP应用程序。
<td class="text-nowrap"><a class="btn btn-primary text-white" href="@Url.Action("Edit", "Controller", new { id = item.Id })"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</a>  &nbsp;&nbsp; <button value="@item.Id" class="btn btn-primary text-white delete"><i class="fa fa-trash-o"></i>&nbsp;Delete</button></td>
$(".delete").unbind().click(function () {
        var entryId = $(this).val();
        if (confirm("Are you sure you want to delete?"))
        {
            var selected = $(this).parents("tr").addClass("selected");
            $.ajax(
            {
                url: '@Url.Action("Delete", "Controller")',
                type: "POST",
                dataType: "json",
                data: { id: entryId }
            })
            .done(function (data) {
                if (data == 1) {
                    table.row(".selected").remove().draw(false); // Delete row from view
                }
                else {
                    Alert("Something went wrong...")
                }
            });
        }
    });