2013-01-10 71 views
0

仅供参考,我在Our Umbraco论坛上提出过同样的问题,但至今未收到任何回复。如何阻止Umbraco显示对话框?

我们在一个文档 - >它显示一个讲话泡沫AfterSave事件运行代码:

((BasePage)HttpContext.Current.Handler).speechBubble(BasePage.speechBubbleIcon.error, "Error", "Problem");

我们也尝试

BasePage.Current.ClientTools.ShowSpeechBubble(BasePage.speechBubbleIcon.error, "Error", "Problem");

以防万一,我们调用了错误用于显示对话框的API函数。

我们在验证文档的属性并且该属性无效后执行此操作,以便通知用户有问题。

问题是,即使执行了上述代码,在我们的AfterSave代码之后运行的Umbraco代码也会显示它自己的语音气泡,即说“已完成”以表示文档已保存的语音气泡。这导致我们的讲话泡泡永远不会显示出来。

有人可以建议我们如何展示一个不会被Umbraco自己称为泡泡泡泡的讲话泡泡吗?

回答

1

您可以通过在检查失败时取消发布文档来停止对话泡泡。

 void Document_BeforePublish(Document sender, umbraco.cms.businesslogic.PublishEventArgs e) 
    {  
     if(!passed){ 
      e.Cancel = true; 
      ((BasePage)HttpContext.Current.Handler).speechBubble(BasePage.speechBubbleIcon.error, "Error", "Problem"); 
     } 
    } 
+1

一个警告是代码必须在文档的'AfterSave'事件中运行。我现在还记得我曾尝试在'AfterSave'中设置'e.Cancel = true',这没有什么区别。原因是,在Umbraco代码本身中,在调用AfterSave之后,它们根本不会对'e.Cancel'执行任何操作 - 它被忽略。干杯Umbraco :) –

1

您可以通过在页面生命周期的后期注入你的对话气泡,像这样

var page = HttpContext.Current.Handler as Page; 
if (page != null) 
{ 
    page.PreRenderComplete += AddAlertBubble; 
} 

而且AddAlertBubble功能工作轮这只是有你已经拥有:

void AddAlertBox(object sender, EventArgs e) 
{ 
    umbraco.BasePages.BasePage.Current.ClientTools.ShowSpeechBubble(umbraco.BasePages.BasePage.speechBubbleIcon.error, "Error", "Problem"); 
} 
+0

欢呼的答案。我不再在这个项目上工作,所以不幸的是我无法尝试它:(虽然看起来很有希望,所以非常感谢。 –