SheerResponse ShowModalDialog不会返回结果

时间:2015-10-13 09:43:30

标签: c# html modal-dialog sitecore sitecore8

我正在使用sitecore 8 Update 2。 我正在扩展TreelistEx字段。

向用户呈现模式对话框(由Sheerresponse使用QuickContact.html创建)。 在这里,用户可以填写4个字段。当用户点击" OK"这些字段的值将保存到对象中。我想返回这个对象/值。然而,我找不到实现这一目标的方法。

(ClientPipelineArgs永远不会返回任何结果)

namespace be.absi.kbs.extensions
{
    class AbsiTreeListEx : TreelistEx, IMessageHandler
    {

    void IMessageHandler.HandleMessage(Message message)
    {
        if (message == null)
        { return; }

        if (message["id"] == null)
        { return; }

        if (!message["id"].Equals(ID))
        { return; }

        var fieldInfo = _fieldInformation[message["id"]];

        switch (message.Name)
        {
            case "treelist:edit":
                var nvcEdit = new NameValueCollection { { "source", fieldInfo.Source } };
                Sitecore.Context.ClientPage.Start(this, "Edit", nvcEdit);
                break;

            case "absitreelistex:absiquickadd":
                var nvcQuickAdd = new NameValueCollection { { "clientFieldId", message["id"] } };
                Sitecore.Context.ClientPage.Start(this, "QuickAddItem", nvcQuickAdd);
                break;
        }
    }

    protected void QuickAddItem(ClientPipelineArgs args)
    {
        if (args.IsPostBack)
        {
            // GET information from the QuickContact.html
        }
        else
        {
            var options = new ModalDialogOptions("/QuickContact.html")
            {
                Closable = true,
                Response = true
            };

            SheerResponse.ShowModalDialog(options);
            args.WaitForPostBack();
        }
    }
}
}

QuickContact.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <base target="_self">
  <title></title>
  <script type="text/javascript">

    function sendResponse()
    {
        var o = new Object();
        o.forename = document.getElementById("FirstNameId").value;
        o.surname = document.getElementById("LastNameId").value;
        o.phone = document.getElementById("PhoneId").value;
        o.mail = document.getElementById("MailId").value;
        window.returnValue = o;
        return o;
    }

    function OK()
    {
        var returnVal = sendResponse();

        var jQueryResult = window.parent.$('.ui-dialog-content:visible');

        self.returnValue = returnVal;
        document.returnValue = returnVal;
        window.returnValue = returnVal;

        jQueryResult.dialog('close');
    }

  </script>
  </head>
  <body>

    <label style="min-width: 80px;">First Name: </label><input type="text" id="FirstNameId" /><br />
    <label style="min-width: 80px;">Last Name: </label><input type="text" id="LastNameId" /><br />
    <label style="min-width: 80px;">Phone: </label><input type="text" id="PhoneId" /><br />
    <label style="min-width: 80px;">Mail: </label><input type="text" id="MailId" /><br />
    <br />
    <input type="button" value="OK" onclick="OK()" />

  </body>
</html>

2 个答案:

答案 0 :(得分:0)

我没有真正找到这个问题的合法解决方案。 我确实通过将我的结果写入coockie并将其读取到服务器端(之后删除它)来解决它

答案 1 :(得分:0)

尝试在JavaScript中使用window.top.returnValue = returnVal;设置结果值,并使用args.Result在我们的C#代码中读取结果值。这对我有用。