【问题标题】:Get value of jquery ui dialog in code behind在后面的代码中获取 jquery ui 对话框的值
【发布时间】:2023-03-12 03:00:01
【问题描述】:

我有一个 jquery ui 对话框,上面有一个单选按钮列表。当用户单击确定时我需要调用服务器端方法并且我需要传递所选值。我尝试通过调用 ajax 方法并将所选值作为参数传递来做到这一点。这很好用(值已传递),但我无法从该方法访问 cookie(出现错误 - 请求在此上下文中不可用),这是有道理的,因为这是一个 ajax 请求。代码如下:

$("#dialogReject").dialog({
            autoOpen: false,
            height: 300,
            width: 350,
            modal: true,
            buttons: {
                "Reject": function () {
                    var value = $(this).find('input:checked').val();
                    $.ajax({
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        url: "/myPage.aspx/RejectDocumentWM",
                        data: "{'rejectReason':'" + value + "'}",
                        dataType: "json",
                        success: function (data) {
                            alert('success');
                        },
                        error: function (result) { alert('error'); }
                    });
                    $(this).dialog('close');
                },
                Cancel: function () {
                    $(this).dialog("close");
                }
            }
        });

拒绝文档():

 [WebMethod]
    public static void RejectDocumentWM(string rejectReason)
    {
        MyNamespace.myPage page = new MyNamespace.myPage();
        page.RejectDocument(rejectReason);
    }

 protected void RejectDocument(string rejectReason)
    {
        batch batch = (batch)Session["Batch"];
        if (client.RejectDocument(batch.GetCurrentDoc().icn, rejectReason, Request.Cookies["username"].Value)) //here is where I get the error
        {
            NextDocument();
        }
    }

我尝试通过将值放入隐藏字段然后调用按钮单击来调用服务器端方法。我的问题是隐藏字段的值始终为空白,即使它在客户端脚本中设置正确。这是代码:

            $("#dialogReject").dialog({
            autoOpen: false,
            height: 300,
            width: 350,
            modal: true,
            buttons: {
                "Reject": function () {
                    var value = $(this).find('input:checked').val();
                    $('[id$="hdfRejectReason"]').val(value); //this sets properly
                    $('[id$="btnRejectDoc"]').click();
                    $(this).dialog('close');
                },
                Cancel: function () {
                    $(this).dialog("close");
                }
            }

 protected void btnRejectDoc_Click(object sender, EventArgs e)
    {
        batch batch = (batch)Session["Batch"];
        if (client.RejectDocument(batch.GetCurrentDoc().icn, hdfRejectReason.Value, Request.Cookies["username"].Value))
//hdfRejectReason.Value is blank
        {
            NextDocument();
        }
    }

对我有什么想法吗?我已经黔驴技穷了。 谢谢!

【问题讨论】:

    标签: c# jquery-ui-dialog


    【解决方案1】:

    首先,这个 hf 是在“弹出”部分还是在“主页”部分?

    其次,在stackoverflow中,我们讨论并设置了其他(更好的?)在jQuery中设置隐藏字段值的方法:

        <div class="hfFoo-wrap">
            <asp:HiddenField runat="server" ID="hfFoo" />
        </div>
    
    function FooBarFunction() {
        var hfFoo = $('.hfFoo-wrap input[type=hidden]');
        hfFoo.val('Bar');
        var isBar = hfFoo.val();
    } 
    

    也许在 btnRejectDoc_Click 中还有其他“空”或“空”参数?

    第三:我更喜欢带有“aspx”页面和“回调委托”的 FrameDialog。

    1. 将弹出窗口创建为“aspx”页面
    2. 由 jQuery 作为 jQuery.FrameDialog 从“主页面”打开弹出窗口
    3. 从“aspx-popup”关闭对话框作为“关闭弹出窗口”(jQuery.FrameDialog.closeDialog();)
    4. 在“主页”上捕获回调委托(使用弹出窗口中的参数)并在此处设置隐藏字段

    【讨论】:

    • 我没有问题设置值 - 它设置正确。我在设置值并显示正确的值后发出警报。问题是后面的代码无法识别设置的值。不,我没有任何其他参数。
    • 这个 hf 在“弹出”或“主页”部分?
    • 它在弹出窗口中。我把它移到了主页,它现在可以工作了。感谢您指出我的方向。如果您将其作为答案(即 hf 需要在主页中),我会标记它。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2012-09-24
    • 2015-09-08
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    相关资源
    最近更新 更多