我正在使用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>
答案 0 :(得分:0)
我没有真正找到这个问题的合法解决方案。 我确实通过将我的结果写入coockie并将其读取到服务器端(之后删除它)来解决它
答案 1 :(得分:0)
尝试在JavaScript中使用window.top.returnValue = returnVal;
设置结果值,并使用args.Result
在我们的C#代码中读取结果值。这对我有用。