【问题标题】:Send Variable from AJAX table to ASP.NET MVC Controller将变量从 AJAX 表发送到 ASP.NET MVC 控制器
【发布时间】:2019-03-18 12:43:38
【问题描述】:

我知道这个话题比较常见,但我花了很长时间试图用已有的帖子解决这个问题,但我没有找到解决我的问题的运气。 我有一个带有“保险箱”小型数据库的主页,当用户单击其中一个保险箱时,它应该将他们带到“项目”数据库视图并仅显示他们单击的保险箱的项目。但是,它却没有显示任何结果? (我有项目表来显示所有结果,所以我知道这不是数据库的问题)。更令人困惑的是,我希望用作过滤器的“数据”确实在 URL 中正确显示,所以这也应该没问题吗? 任何帮助将不胜感激......提前感谢窥视! :)

 $(document).ready(function () {
        var oTable = $('#CBR').DataTable({
            "ajax": {
                "url": '/Home/GetSafe',
                "type": "get",
                "datatype": "json"
            },
            "columns": [

                { "data": "Safe_ID", "autoWidth": true },
                { "data": "Department_ID", "autoWidth": true },
                {
                    "data": "Safe_ID", "width": "50px", "render": function (selectedSafe) {

                        $.ajax({
                            url: '/Home/GetSafeItems',
                            dataType: "json",
                            data: { selectedSafe: selectedSafe },
                            type: "GET",
                            success: function (data) {

                                if (data.success) {
                                    alert(data.message);
                                }                                          
                            },
                            error: function (xhr) {
                                alert(selectedSafe);
                            }
                        });
                        return '<a href="/home/safeItems/' + selectedSafe + '">Open Safe</a>';
                    }
                }
            ]
        })

主页视图(上图)

public ActionResult GetSafeItems(string selectedSafe)
    {
        using (CBREntities2 dc = new CBREntities2())
        {
            var safeItem = dc.Items.Where(a => a.Safe_ID == selectedSafe).Select(s => new {
                Serial_Number = s.Serial_Number,
                Safe_ID = s.Safe_ID,
                Date_of_Entry = s.Date_of_Entry,
                Title_subject = s.Title_subject,
                Document_Type = s.Document_Type,
                Sender_of_Originator = s.Sender_of_Originator,
                Reference_Number = s.Reference_Number,
                Protective_Marking = s.Protective_Marking,
                Number_recieved_produced = s.Number_recieved_produced,
                copy_number = s.copy_number,
                Status = s.Status,
                Same_day_Loan = s.Same_day_Loan
            }).ToList();

        //    var safeItems = dc.Items.Where(a => a.Safe_ID).Select(s => new { Safe_ID = s.Safe_ID, Department_ID = s.Department_ID, User_ID = s.User_ID }).ToList();
            return Json(new { data = safeItem }, JsonRequestBehavior.AllowGet);
        }
    }

控制器(上)

@{
Layout = null;
}

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Items</title>
<link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
<link rel="stylesheet" 
href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" />
<link href="~/Content/themes/base/jquery-ui.min.css" rel="stylesheet" />
</head>
<body>
<div style="width:90%; margin:0 auto" class="tablecontainer">
    <a class="popup btn btn-primary" href="/home/SaveItem/0" style="margin- 
 bottom:20px; margin-top:20px">Add new Item </a>
    <table id="CBR-Item">
        <thead>
            <tr>
                <th>Serial Number</th>
                <th>Safe ID</th>
                <th>Date of Entry</th>
                <th>Title/Subject</th>
                <th>Document type</th>
                <th>Sender of Originator</th>
                <th>Reference Number</th>
                <th>Protective Marking</th>
                <th>Number recieved/produced</th>
                <th>Copy number</th>
                <th>Status</th>
                <th>Same-Day Loan</th>
                <th>Edit</th>
                <th>Delete</th>
            </tr>
        </thead>
    </table>
</div>

<script src="~/Scripts/jquery-3.3.1.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<script src="~/Scripts/jquery-ui-1.12.1.min.js"></script>

<script>
    $(document).ready(function () {
        var oTable = $('#CBR-Item').DataTable({
            "ajax": {
                "url": '/Home/GetSafeItems',
                "type": "get",
                "datatype": "json"
            },
            "columns": [

                { "data": "Serial_Number", "autoWidth": true },
                { "data": "Safe_ID", "autoWidth": true },
                { "data": "Date_of_Entry", "autoWidth": true },
                { "data": "Title_subject", "autoWidth": true },
                { "data": "Document_Type", "autoWidth": true },
                { "data": "Sender_of_Originator", "autoWidth": true },
                { "data": "Reference_Number", "autoWidth": true },
                { "data": "Protective_Marking", "autoWidth": true },
                { "data": "Number_recieved_produced", "autoWidth": true },
                { "data": "copy_number", "autoWidth": true },
                { "data": "Status", "autoWidth": true },
                { "data": "Same_day_Loan", "autoWidth": true },
                {
                    "data": "Serial_Number", "width": "50px", "render": function (data) {
                        return '<a class="popup" href="/home/SaveItem/' + data + '">Edit</a>';
                    }
                },
                {
                    "data": "Serial_Number", "width": "50px", "render": function (data) {
                        return '<a class="popup" href="/home/DeleteItem/' + data + '">Delete</a>';
                    }
                }
            ]
        })
        $('.tablecontainer').on('click', 'a.popup', function (e) {
            e.preventDefault();
            OpenPopup($(this).attr('href'));
        })
        function OpenPopup(pageUrl) {
            var $pageContent = $('<div/>');
            $pageContent.load(pageUrl, function () {
                $('#popupForm', $pageContent).removeData('validator');
                $('#popupForm', $pageContent).removeData('unobtrusiveValidation');
                $.validator.unobtrusive.parse('form');
            });
            $dialog = $('<div class="popupWindow" style="overflow:auto"></div>')
                .html($pageContent)
                .dialog({
                    draggable: false,
                    autoOpen: false,
                    resizable: false,
                    model: true,
                    title: 'Popup Dialog',
                    height: 550,
                    width: 600,
                    close: function () {
                        $dialog.dialog('destroy').remove();
                    }
                })

            $('.popupWindow').on('submit', '#popupForm', function (e) {
                var url = $('#popupForm')[0].action;
                $.ajax({
                    type: "POST",
                    url: url,
                    data: $('#popupForm').serialize(),
                    success: function (data) {
                        if (data.status) {
                            $dialog.dialog('close');
                            oTable.ajax.reload();
                        }
                    }
                })

                e.preventDefault();
            })
            $dialog.dialog('open');
        }
    })
</script>

主安全视图(上)

我没有包含安全视图,因为该元素通常在没有过滤器的情况下工作并且正在调用控制器方法。但是如果需要可以上传。

修正:我已经几乎解决了post问题...但是post实际上不会到达控制器(它只是不断触发下面代码中的错误值)

{
                    "data": "Safe_ID", "width": "50px", "render": function (data) {                           
                        return '<a class="safeLink" href="/home/safeItems/' + data + '">Open Safe</a>';
                       // return { selectedSafe: selectedSafe }


                    }
                }
            ]
        })


        $('.tablecontainer').on('click', 'a.safeLink', function (e) {
            e.preventDefault();
            var whatWhat = "SEC-1000";
            var selectedSafeZZ = { theSafe: whatWhat };
            $.ajax({
                url: '/Home/GetSafeItems',
                data: JSON.stringify(selectedSafeZZ),
                contentType: "application/json; charset=utf-8;",
                type: "POST",
                success: function (data) {
                    alert(data);
                },
                error: function (xhr) {
                    alert("Boohooo");
                }
            });

【问题讨论】:

    标签: asp.net sql-server ajax model-view-controller


    【解决方案1】:

    您的 ajax 调用与锚标记链接无关。那么您在家庭控制器中有没有任何方法可以返回数据以查看视图结果。

    你能粘贴你完整的控制器代码吗

    【讨论】:

    • 嗨,我现在已经粘贴了上面的主表格视图页面。该视图将正常工作(但将显示表中的所有项目,而我试图让它只显示我现在单击的保险箱中的项目)。视图的显示由控制器中的“Actionresult GetSafeItems”控制(上面发布),但我无法将选定的 href 发布到控制器进行管理......如果这有意义吗?对不起,我还在努力自己学习绳索!
    • 这里"ajax": { "url": '/Home/GetSafeItems', "type": "get", "datatype": "json" }, 你实际上并没有将选定的字符串传递给服务器。所以如果可以在getsafeitems方法中放置一个调试点,你会看到一个空字符串
    • 在/home/safeitem/value的action方法中...读取这个值并赋值给一个view bag,然后在js上的view中你可以把这个viewbag值赋给一个js变量然后您可以将其作为查询字符串或路径参数发送到服务器端方法 GetSafeItems
    • 嗨,帕万,好的,我想我听懂了你的意思。你能告诉我如何在代码中做到这一点吗?这真的是我第一次接触 AJAX。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多