2013-01-10 94 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

歡呼的答案。我不再在這個項目上工作,所以不幸的是我無法嘗試它:(雖然看起來很有希望,所以非常感謝。 –