将Id传递给控制器

时间:2014-05-09 19:41:07

标签: asp.net-mvc view

假设我有一个网站,我在列表中显示博客帖子: 型号:

 public class BlogPost
    {
        public BlogPost()
        {
            Text = blogtext

            image = "http://placehold.it/200x200";
        }

        public string Id { get; set; }
        public string Text { get; set; }
        public string image { get; set; }
    }

我想在每个博客帖子上添加一个按钮,将其ID传递给控制器​​(我有一个删除它的方法)。有人可以告诉我如何制作这个按钮吗?

3 个答案:

答案 0 :(得分:2)

您创建该按钮的方式如下:

@Html.ActionLink("Delete", "Delete", new { id = model.Id})

@Html.ActionLink有三个参数(在此用法中):第一个是链接文本,第二个是您要发送链接的操作,第三个是包含您要发送的数据的对象

答案 1 :(得分:2)

查看

@using (Html.BeginForm("Delete", "BlogPost"))
{
    @Html.AntiForgeryToken()
    @Html.HiddenFor(m => m.Id)
    <button type="submit">Delete</button>
}

<强>控制器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int id)
{
    // do stuff
}

注意:我的答案和@ sphanley之间的区别在于行动应该如何回应。如果您使用POST(我的),那么您的操作应立即删除匹配的项目。如果您使用GET(sphanley's),那么您应该提供一个页面进行确认,其表单与我的答案非常相似,只有在发布后才会删除。理由是删除(以及其他任何原子的)只能通过POST(或更具体的动词,如PUT或DELETE)而不是GET发生。

答案 2 :(得分:0)

<input type="button" value="Remove" name="Delete"  data-id="@Model.Id" class="RemoveLink"/>


    script>
        $(document).ready(function () {
            $(".RemoveLink").click(function () {
                var deleteLink = $(this);
                $.post(
                    '@Url.Action("Delete")',
                        AddAntiForgeryToken({ id: deleteLink.attr('data-id') }))
                       .done(function () {
                           var parentRow = deleteLink.parents("tr:first");
                           parentRow.fadeOut('fast', function () {
                               parentRow.remove();
                           });
                       });
                return false;
            });

            AddAntiForgeryToken = function (data) {
                data.__RequestVerificationToken = $('input[name=__RequestVerificationToken]').val();
                return data;
            };
        });
    </script>
  

像这样使用