在代码隐藏中获取jquery ui对话框的值

本文关键字:ui 对话框 jquery 获取 代码 隐藏 | 更新日期: 2023-09-27 18:25:08

我有一个jquery ui对话框,上面有一个单选按钮列表。当用户单击ok时,我需要调用一个服务器端方法,并且我需要传递所选的值。我试着通过调用一个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();
        }
    }

有什么想法吗?我无计可施。谢谢

在代码隐藏中获取jquery ui对话框的值

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

其次,在stackerflow中,我们讨论并设置了其他(更好的?)方法来设置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();
} 

也许在btnjectDoc_Click中有其他"null"或"empty"参数?

第三:我更喜欢带有"aspx"页面和"callback delegate"的FrameDialog。

  1. 将弹出窗口创建为"aspx"页面
  2. 通过jQuery从"主页"打开弹出窗口作为jQuery.FrameDialog
  3. 将对话框从"aspx popup"关闭为"关闭popup"(jQuery.FrameDialog.closeDialog();)
  4. 在"主页"上捕获回调委托(带有弹出窗口中的params)并在那里设置隐藏字段