【问题标题】:How to pass from pop up of jqgrid when clicked button?单击按钮时如何从jqgrid的弹出窗口中传递?
【发布时间】:2015-11-29 06:42:13
【问题描述】:

我使用 mvc4。 jqgrid的行中有按钮。单击按钮时,打开弹出窗口并在弹出窗口中编辑行网格的数据。但是当单击弹出按钮时,不要将数据传递给控制器​​的操作。 弹出代码:

{
     name: 'Notes',
     width: 160,
     sortable: false,
     resizable: false,
     search: false,
     formatter: function () {
         return "<button onclick='OpenDialog()' style='margin-left:12px'>Pop Up Dlg</button>";
     }
 }

弹出代码(http://jqueryui.com/dialog/#modal-form):

<script>
    $(function() {
        var dialog, form,
        modserial = $("#ModSerial"),
            simno = $("#SimNo"),

            function addUser() {
                $(function() {
                    $.ajax({
                        url: '@Url.Action("EditMet", "MetGrid")',
                        data: "{'ModSerial':'" + document.getElementById('ModSerial').value + "', 'SimNo':'" + document.getElementById('SimNo').value + "'}",
                        type: "Post",
                        dataType: "Html",
                        success: function(result) {
                            $("#Data").html(result);
                        },
                        error: function() {
                            alert("Error!");
                        }
                    });
                });
            }

            function log() {}
        dialog = $("#dialog-form").dialog({
            autoOpen: false,
            height: 400,
            width: 350,
            modal: true,
            buttons: {
                "...": log,
                    "Confirm": addUser,
                Cancel: function() {
                    dialog.dialog("close");
                }
            },
            close: function() {
                form[0].reset();
                allFields.removeClass("ui-state-error");
            }
        });
        form = dialog.find("form").on("submit", function(event) {
            event.preventDefault();
            addUser();
        });
    });
</script>

当调用 action(@Url.Action("EditMeter", "MeterGrid")) 时,将 null 传递给控制器​​。如何将数据和id的行网格传递给action?

【问题讨论】:

  • 能否包含MetGrid动作的原型(参数和返回值的类型)?您确定该操作需要 JSON 格式的数据吗?也许您应该改用data: {ModSerial: document.getElementById('ModSerial').value, SimNo: document.getElementById('SimNo').value}?数据似乎与单击按钮所在的行无关。为什么需要在网格的 每一 行中包含相同的按钮,所有按钮的工作方式都相同? id 为 ModSerialModSerial 的元素在哪里(在 jqGrid 内部或外部)?
  • @Oleg 数据依赖于单击按钮的行,因为 ModSerial 和 SimNo 填充了弹出窗口,当单击按钮时,我希望将行 ID 和 modseril 和 simno 传递给操作。如果单击按钮时 ModeSerial 在网格中有值,则文本框的 Moserial 按值填充并在弹出窗口中进行编辑。我的操作(公共 ActionResult EditMet(tblMet met, string ModSerial, string SimNo))。这个弹出窗口正在编辑网格中的一些数据。网格中有 moserial 和 simno 的元素,但我想在弹出窗口中编辑这个元素。
  • 对不起,我还是不明白你的问题。 1)OpenDialog 的代码可能会有所帮助。 2)我没有看到您获得 rowid 并转发到 addUser 或其他函数的代码 3)addUser 的代码似乎我错了,因为 不需要 $(function() {...}); 构造超过 $.ajax 调用。 $(function() {...}); 表示注册文档就绪事件处理程序,但您可能只需要对服务器进行 $.ajax 调用。 4) 我建议你不要在&lt;button&gt; 上使用onclick 属性,而是使用beforeSelectRow 而不是here

标签: javascript jquery asp.net-mvc-4 jquery-ui jqgrid


【解决方案1】:

您应该使用contentType: "application/json;charset=utf-8"stringify JSON 数据,如下所示。

$.ajax({
     url: '@Url.Action("EditMet", "MetGrid")',
     data: JSON.stringify({"ModSerial": document.getElementById('ModSerial').value, "SimNo": document.getElementById('SimNo').value}),
     type: "post",
     contentType: "application/json;charset=utf-8",
     dataType: "Html",
     success: function(result) {
               $("#Data").html(result);
     },
     error: function() {
               alert("Error!");
     }
 });

希望它现在可以工作。

【讨论】:

  • 感谢您的帮助,这对我不起作用。当我添加此代码时,永远不要调用操作。
  • 开发者控制台在说什么?
  • 浏览 Oleg 的评论。
猜你喜欢
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多