Asp.net mvc 如何使用按钮将项目id从项目列表传递到模式,然后从模式传递到控制器?

Asp.net mvc 如何使用按钮将项目id从项目列表传递到模式,然后从模式传递到控制器?,asp.net-mvc,twitter-bootstrap-3,bootstrap-modal,Asp.net Mvc,Twitter Bootstrap 3,Bootstrap Modal,所以我有一个web URL列表,所有这些URL都是从SQL获取的,并且有一个id、一个地址等等 我使用以下内容在表格中列出它们: <div> <div class="well" margin-left:20px; margin-right:20px"> <h2 style="margin-left:20px; margin-top:10px">Control Added Links</h2> <tabl

所以我有一个web URL列表,所有这些URL都是从SQL获取的,并且有一个id、一个地址等等

我使用以下内容在表格中列出它们:

<div>
    <div class="well" margin-left:20px; margin-right:20px">
        <h2 style="margin-left:20px; margin-top:10px">Control Added Links</h2>
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>
                        Link Address
                    </th>
                    <th>
                        Check Interval
                    </th>
                    <th>
                        Status
                    </th>
                    <th>
                        #
                    </th>
                </tr>
            </thead>
            <tbody>
                @foreach (var i in links)
                {
                    <tr>
                        <td>
                            <a href="http://@i.Address" target="_blank">@i.Address</a>
                        </td>
                        <td>
                            @i.Interval
                        </td>
                        <td>
                            @if (i.Status)
                            { <text> ON </text>}
                            else
                            { <text> OFF </text>}
                        </td>
                        <td>
                            <a href="~/Control/Delete/@i.Id">
                                &#10006;
                            </a>
                        </td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
</div>
我更改了此代码,设法将数据从按钮传递到模式:

<a data-toggle="modal" data-id="@i.Id" data-request-url="@Url.Action("Delete", "Control")" title="Delete link" class="delete-Link btn btn-danger" href="#deleteLink">
    &#10006;
</a>

<div id="deleteLink" class="modal fade" role="dialog">
    <div class="modal-dialog">

        <!-- Modal content-->
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Test</h4>
            </div>
            <div class="modal-body">
                This will delete all records related to this link. Are you sure?
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-primary" onclick="deleteConfirm()">Yes</button>
                <button class="btn btn-warning" data-dismiss="modal">No</button>
            </div>
        </div>
    </div>
</div>

<script>
    var myLinkId
    var url
    $(document).on("click", ".delete-Link", function () {
        myLinkId = $(this).data('id');
        url = $(this).data('request-url');
        $(".modal-body #linkId").val(myLinkId);
        // As pointed out in comments,
        // it is superfluous to have to manually call the modal.
        // $('#addBookDialog').modal('show');
    });
    function deleteConfirm()
    {
        debugger;
        $.post(url), { Id: myLinkId };
    }
</script>

&时代;
试验
这将删除与此链接相关的所有记录。你确定吗?
对
不
var myLinkId
变量url
$(文档)。在(“单击”,“删除链接”,函数(){
myLinkId=$(this.data('id');
url=$(this.data('request-url');
$(“.modal body#linkId”).val(myLinkId);
//正如评论中指出的那样,
//手动调用modal是多余的。
//$('#addBookDialog').modal('show');
});
函数deleteConfirm()
{
调试器;
$.post(url),{Id:myLinkId};
}
但现在的问题是将这些数据从modal传递给控制器。我编写了“deleteConfirm”函数,但它似乎不起作用,它没有转到~/Control/Delete

我问题的第一部分实际上已经解决了,我可以将id从按钮传递到模式,但我不确定它是否正确解决了,所以我也要求这样做,我目前使用JavaScript传递id,但不知道是否可以直接从按钮传递到模式本身

我设法解决了我的问题,并通过为每个项目创建一个模式来正确删除。。。我认为这是一种草率的方式,当我有100个链接时,这可能是一个问题

我想到了一个解决方案,但不知道如何实施:

在视图内部有一个“globalId”参数,当点击一个按钮时,i.Id被分配给globalId,然后打开模态,该模态内部有globalId作为参数。就像使用一样,使用inside modal,它通过单击删除按钮进行更改。但问题是,我不知道如何创建这个全局参数,并通过单击按钮为其分配i.Id

我认为可以实现我可能的解决方案的方法:

我想在视图中有一个变量,比如int globalId

假设我按下id=10的delete按钮,我想做的就是简单地拥有“global=id”,所以我想给数字分配10。若按钮的id是12,我希望“global=id”再次出现,这次将12分配给数字

这样,modal将只使用globalId,因此我可以使其具有:

<a href="~/Control/Delete/@globalId">Yes</a>

这样,将只有一个模态,每个按钮将打开相同的模态,模态将使用相同的变量。只需单击按钮,分配给该模式的globalId值就会改变


问题是,我如何创建这个局部变量,以及如何简单地为这个局部变量分配一个新值?

我在您的视图中做了一些更改,使之能够工作。我在模型中添加了一个隐藏字段,并将id存储在模型的show事件中。在确认时,从这个隐藏字段中获取id以构建post url

<a data-toggle="modal" data-id="@id" data-request-url="@Url.Action("Delete", "Home")" title="Delete link" class="delete-Link btn btn-danger" href="#deleteLink">
    &#10006;
</a>

<div id="deleteLink" class="modal fade" role="dialog">
    <div class="modal-dialog">
        <input type="hidden" id="linkId" />
        <!-- Modal content-->
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Test</h4>
            </div>
            <div class="modal-body">
                This will delete all records related to this link. Are you sure?
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-primary" onclick="deleteConfirm()">Yes</button>
                <button class="btn btn-warning" data-dismiss="modal">No</button>
            </div>
        </div>
    </div>
</div>

<script>
    $('#deleteLink').on('show.bs.modal', function (e) {
        $("#linkId").val($(e.relatedTarget).data('id'));
    });

    function deleteConfirm()
    {
        var url = "@Url.Action("Delete", "Control")/" + $("#linkId").val();
        $.post(url).success(function () {
            location.href = "@Url.Action("Index", "Control")";
    });
    }
</script>

&时代;
试验
这将删除与此链接相关的所有记录。你确定吗?
对
不
$('#deleteLink').on('show.bs.modal',函数(e){
$(“#linkId”).val($(e.relatedTarget).data('id');
});
函数deleteConfirm()
{
var url=“@url.Action(“Delete”、“Control”)/”+$(“#linkId”).val();
$.post(url).success(函数(){
location.href=“@Url.Action(“索引”、“控制”)”;
});
}

这很有效,非常感谢。但有一个问题我不明白,通常当删除完成或@Url.Action(“删除”,“控制”)完成时,它应该刷新页面并显示新的链接表,但它不刷新?当单击“是”时,它也不会关闭模式。这不是问题,因为它将刷新页面,但关闭模式后刷新可能会更好。你认为这是什么原因?编辑:好的,我添加了data dismission=“modal”,修复了modal未关闭的问题。但它仍然不能刷新页面。仍然不能刷新它说“TypeError:$.post(…)。成功不是一个函数”,但它在我这边运行良好。你能粘贴
$.post
块吗?
<a href="~/Control/Delete/@globalId">Yes</a>
<a data-toggle="modal" data-id="@id" data-request-url="@Url.Action("Delete", "Home")" title="Delete link" class="delete-Link btn btn-danger" href="#deleteLink">
    &#10006;
</a>

<div id="deleteLink" class="modal fade" role="dialog">
    <div class="modal-dialog">
        <input type="hidden" id="linkId" />
        <!-- Modal content-->
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Test</h4>
            </div>
            <div class="modal-body">
                This will delete all records related to this link. Are you sure?
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-primary" onclick="deleteConfirm()">Yes</button>
                <button class="btn btn-warning" data-dismiss="modal">No</button>
            </div>
        </div>
    </div>
</div>

<script>
    $('#deleteLink').on('show.bs.modal', function (e) {
        $("#linkId").val($(e.relatedTarget).data('id'));
    });

    function deleteConfirm()
    {
        var url = "@Url.Action("Delete", "Control")/" + $("#linkId").val();
        $.post(url).success(function () {
            location.href = "@Url.Action("Index", "Control")";
    });
    }
</script>